oh-my-opencode 4.16.3 → 4.17.0
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/omomomo.md +1 -1
- package/.agents/skills/hyperplan/SKILL.md +3 -3
- package/.agents/skills/omomomo/SKILL.md +1 -1
- package/.opencode/command/omomomo.md +1 -1
- package/.opencode/skills/hyperplan/SKILL.md +3 -3
- package/.opencode/skills/pre-publish-review/SKILL.md +3 -0
- package/README.ja.md +4 -4
- package/README.ko.md +4 -4
- package/README.md +2 -2
- package/README.ru.md +4 -4
- package/README.zh-cn.md +4 -4
- package/dist/cli/index.js +179 -63
- package/dist/cli-node/index.js +179 -63
- package/dist/features/team-mode/test-support/async-test-helpers.d.ts +2 -2
- package/dist/index.js +121 -58
- package/dist/plugin/chat-message/types.d.ts +4 -0
- package/dist/plugin/command-execute-before.d.ts +1 -0
- package/dist/plugin/stop-continuation.d.ts +17 -0
- package/dist/skills/remove-ai-slops/SKILL.md +2 -2
- package/dist/skills/start-work/SKILL.md +5 -2
- package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/dist/tui.js +71 -29
- package/package.json +15 -14
- package/packages/git-bash-mcp/package.json +27 -0
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +3 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +84 -19
- 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/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +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 +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +6 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +67 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +0 -13
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +1 -79
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +6 -6
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +26 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/{lazycodex-executor.toml → lazycodex-worker-low.toml} +6 -4
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +26 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +55 -28
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +55 -28
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +22 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +0 -68
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +55 -28
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +405 -25
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +16 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +20 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +12 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +148 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +209 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +25 -2
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +14 -15
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +29 -27
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +14 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +10 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +27 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +23 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +16 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +138 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +208 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +4 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +8 -35
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +24 -13
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +43 -8
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +55 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +228 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +193 -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 +18 -0
- 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-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +17 -0
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -2
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/model-catalog.json +16 -7
- package/packages/omo-codex/plugin/package-lock.json +13 -13
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +8 -2
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +8 -2
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +5 -2
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +55 -28
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +14 -15
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +29 -27
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +2 -2
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +76 -16
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -2
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -4
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
- package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +4 -101
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +14 -14
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +11 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +4 -2
- package/packages/omo-codex/plugin/test/ulw-plan-skill-contract.test.mjs +9 -40
- package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +4 -277
- package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +5 -5
- package/packages/omo-codex/scripts/install-config.test.mjs +22 -3
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +91 -21
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +2 -2
- package/packages/shared-skills/skills/start-work/SKILL.md +5 -2
- package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
- package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
- package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +0 -70
- package/packages/omo-codex/plugin/test/ulw-research-epistemic-contract.test.mjs +0 -98
- package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.17.0",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"packages/lsp-tools-mcp/dist",
|
|
64
64
|
"packages/lsp-daemon/package.json",
|
|
65
65
|
"packages/lsp-daemon/dist",
|
|
66
|
+
"packages/git-bash-mcp/package.json",
|
|
66
67
|
"packages/git-bash-mcp/dist",
|
|
67
68
|
"packages/shared-skills/package.json",
|
|
68
69
|
"packages/shared-skills/index.mjs",
|
|
@@ -128,7 +129,7 @@
|
|
|
128
129
|
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/pi-goal/tsconfig.json && tsgo --noEmit -p packages/pi-webfetch/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json",
|
|
129
130
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
130
131
|
"test": "bun test",
|
|
131
|
-
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
132
|
+
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
132
133
|
"test:senpi": "node packages/omo-senpi/plugin/scripts/build-extension.mjs && node packages/omo-senpi/plugin/scripts/sync-skills.mjs && node packages/omo-senpi/plugin/scripts/embed-directive.mjs --check && bun test packages/omo-senpi",
|
|
133
134
|
"test:windows-codex": "bun run test:codex",
|
|
134
135
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build"
|
|
@@ -210,18 +211,18 @@
|
|
|
210
211
|
"typescript": "^6.0.3"
|
|
211
212
|
},
|
|
212
213
|
"optionalDependencies": {
|
|
213
|
-
"oh-my-opencode-darwin-arm64": "4.
|
|
214
|
-
"oh-my-opencode-darwin-x64": "4.
|
|
215
|
-
"oh-my-opencode-darwin-x64-baseline": "4.
|
|
216
|
-
"oh-my-opencode-linux-arm64": "4.
|
|
217
|
-
"oh-my-opencode-linux-arm64-musl": "4.
|
|
218
|
-
"oh-my-opencode-linux-x64": "4.
|
|
219
|
-
"oh-my-opencode-linux-x64-baseline": "4.
|
|
220
|
-
"oh-my-opencode-linux-x64-musl": "4.
|
|
221
|
-
"oh-my-opencode-linux-x64-musl-baseline": "4.
|
|
222
|
-
"oh-my-opencode-windows-arm64": "4.
|
|
223
|
-
"oh-my-opencode-windows-x64": "4.
|
|
224
|
-
"oh-my-opencode-windows-x64-baseline": "4.
|
|
214
|
+
"oh-my-opencode-darwin-arm64": "4.17.0",
|
|
215
|
+
"oh-my-opencode-darwin-x64": "4.17.0",
|
|
216
|
+
"oh-my-opencode-darwin-x64-baseline": "4.17.0",
|
|
217
|
+
"oh-my-opencode-linux-arm64": "4.17.0",
|
|
218
|
+
"oh-my-opencode-linux-arm64-musl": "4.17.0",
|
|
219
|
+
"oh-my-opencode-linux-x64": "4.17.0",
|
|
220
|
+
"oh-my-opencode-linux-x64-baseline": "4.17.0",
|
|
221
|
+
"oh-my-opencode-linux-x64-musl": "4.17.0",
|
|
222
|
+
"oh-my-opencode-linux-x64-musl-baseline": "4.17.0",
|
|
223
|
+
"oh-my-opencode-windows-arm64": "4.17.0",
|
|
224
|
+
"oh-my-opencode-windows-x64": "4.17.0",
|
|
225
|
+
"oh-my-opencode-windows-x64-baseline": "4.17.0"
|
|
225
226
|
},
|
|
226
227
|
"overrides": {
|
|
227
228
|
"@earendil-works/pi-agent-core": "0.80.3",
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@oh-my-opencode/git-bash-mcp",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"private": true,
|
|
6
|
+
"bin": {
|
|
7
|
+
"omo-git-bash": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./src/index.ts",
|
|
12
|
+
"import": "./src/index.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "bun build src/cli.ts --outdir dist --target node --format esm",
|
|
17
|
+
"typecheck": "tsgo --noEmit -p tsconfig.json",
|
|
18
|
+
"test": "bun test src/*.test.ts"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@oh-my-opencode/mcp-stdio-core": "workspace:*",
|
|
22
|
+
"@oh-my-opencode/utils": "workspace:*"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"bun-types": "1.3.12"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omo",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.17.0",
|
|
4
4
|
"description": "One Codex plugin namespace for Yeongyu's local Codex components.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Yeongyu Kim",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"./hooks/user-prompt-submit-checking-ulw-loop-steering.json",
|
|
31
31
|
"./hooks/pre-tool-use-recommending-git-bash-mcp.json",
|
|
32
32
|
"./hooks/pre-tool-use-enforcing-unlimited-goal-budget.json",
|
|
33
|
+
"./hooks/pre-tool-use-guarding-ulw-loop-spawns.json",
|
|
33
34
|
"./hooks/post-tool-use-checking-comments.json",
|
|
34
35
|
"./hooks/post-tool-use-checking-lsp-diagnostics.json",
|
|
35
36
|
"./hooks/post-tool-use-checking-codegraph-init-guidance.json",
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
"./hooks/post-compact-resetting-project-rule-cache.json",
|
|
40
41
|
"./hooks/post-compact-resetting-lsp-diagnostics-cache.json",
|
|
41
42
|
"./hooks/stop-checking-start-work-continuation.json",
|
|
43
|
+
"./hooks/stop-checking-ulw-loop-resume.json",
|
|
42
44
|
"./hooks/subagent-stop-checking-start-work-continuation.json",
|
|
43
45
|
"./hooks/subagent-stop-verifying-lazycodex-executor-evidence.json"
|
|
44
46
|
],
|
|
@@ -879,32 +879,88 @@ import { join as join8 } from "node:path";
|
|
|
879
879
|
var MANAGED_REASONING_DEFAULT_UPGRADES = new Map([
|
|
880
880
|
[
|
|
881
881
|
"explorer",
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
882
|
+
[
|
|
883
|
+
{
|
|
884
|
+
previous: { model: "gpt-5.4-mini", effort: "low" },
|
|
885
|
+
current: { model: "gpt-5.6-terra", effort: "medium" }
|
|
886
|
+
},
|
|
887
|
+
{
|
|
888
|
+
previous: { model: "gpt-5.6-terra", effort: "medium" },
|
|
889
|
+
current: { model: "gpt-5.6-luna", effort: "low" }
|
|
890
|
+
}
|
|
891
|
+
]
|
|
886
892
|
],
|
|
887
893
|
[
|
|
888
894
|
"librarian",
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
895
|
+
[
|
|
896
|
+
{
|
|
897
|
+
previous: { model: "gpt-5.4-mini", effort: "low" },
|
|
898
|
+
current: { model: "gpt-5.6-terra", effort: "medium" }
|
|
899
|
+
},
|
|
900
|
+
{
|
|
901
|
+
previous: { model: "gpt-5.6-terra", effort: "medium" },
|
|
902
|
+
current: { model: "gpt-5.6-luna", effort: "low" }
|
|
903
|
+
}
|
|
904
|
+
]
|
|
893
905
|
],
|
|
894
906
|
[
|
|
895
907
|
"momus",
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
908
|
+
[
|
|
909
|
+
{
|
|
910
|
+
previous: { model: "gpt-5.5", effort: "xhigh" },
|
|
911
|
+
current: { model: "gpt-5.6-sol", effort: "ultra" }
|
|
912
|
+
}
|
|
913
|
+
]
|
|
914
|
+
],
|
|
915
|
+
[
|
|
916
|
+
"plan",
|
|
917
|
+
[
|
|
918
|
+
{
|
|
919
|
+
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
920
|
+
current: { model: "gpt-5.6-sol", effort: "max" }
|
|
921
|
+
}
|
|
922
|
+
]
|
|
923
|
+
],
|
|
924
|
+
[
|
|
925
|
+
"lazycodex-worker-medium",
|
|
926
|
+
[
|
|
927
|
+
{
|
|
928
|
+
previous: { model: "gpt-5.6-sol", effort: "high" },
|
|
929
|
+
current: { model: "gpt-5.6-luna", effort: "max" }
|
|
930
|
+
}
|
|
931
|
+
]
|
|
932
|
+
],
|
|
933
|
+
[
|
|
934
|
+
"lazycodex-qa-executor",
|
|
935
|
+
[
|
|
936
|
+
{
|
|
937
|
+
previous: { model: "gpt-5.6-terra", effort: "medium" },
|
|
938
|
+
current: { model: "gpt-5.6-luna", effort: "high" }
|
|
939
|
+
}
|
|
940
|
+
]
|
|
941
|
+
],
|
|
942
|
+
[
|
|
943
|
+
"lazycodex-gate-reviewer",
|
|
944
|
+
[
|
|
945
|
+
{
|
|
946
|
+
previous: { model: "gpt-5.6-sol", effort: "xhigh" },
|
|
947
|
+
current: { model: "gpt-5.6-sol", effort: "high" }
|
|
948
|
+
}
|
|
949
|
+
]
|
|
900
950
|
]
|
|
901
951
|
]);
|
|
902
952
|
function resolveManagedAgentReasoning(input) {
|
|
903
|
-
const
|
|
904
|
-
if (
|
|
905
|
-
return
|
|
906
|
-
|
|
907
|
-
|
|
953
|
+
const steps = MANAGED_REASONING_DEFAULT_UPGRADES.get(input.agentName);
|
|
954
|
+
if (steps === undefined)
|
|
955
|
+
return input.preserved.effort;
|
|
956
|
+
const latest = steps[steps.length - 1];
|
|
957
|
+
if (latest === undefined)
|
|
958
|
+
return input.preserved.effort;
|
|
959
|
+
if (input.bundledModel !== latest.current.model || input.bundledEffort !== latest.current.effort) {
|
|
960
|
+
return input.preserved.effort;
|
|
961
|
+
}
|
|
962
|
+
const preservedMatchesAnyStep = steps.some((step) => input.preserved.model === step.previous.model && input.preserved.effort === step.previous.effort);
|
|
963
|
+
return preservedMatchesAnyStep ? latest.current.effort : input.preserved.effort;
|
|
908
964
|
}
|
|
909
965
|
|
|
910
966
|
// ../src/install/preserved-agent-settings.ts
|
|
@@ -2041,6 +2097,9 @@ function stripTomlLineComment(line) {
|
|
|
2041
2097
|
var LEGACY_MANAGED_CODEX_AGENT_NAMES_TO_PURGE = ["codex-ultrawork-reviewer"];
|
|
2042
2098
|
var CURRENT_MANAGED_CODEX_AGENT_NAMES = [
|
|
2043
2099
|
"explorer",
|
|
2100
|
+
"lazycodex-worker-high",
|
|
2101
|
+
"lazycodex-worker-low",
|
|
2102
|
+
"lazycodex-worker-medium",
|
|
2044
2103
|
"librarian",
|
|
2045
2104
|
"metis",
|
|
2046
2105
|
"momus",
|
|
@@ -2458,12 +2517,18 @@ import { readFile as readFile9 } from "node:fs/promises";
|
|
|
2458
2517
|
import { join as join16 } from "node:path";
|
|
2459
2518
|
var FALLBACK_CODEX_MODEL_CATALOG = {
|
|
2460
2519
|
current: {
|
|
2461
|
-
model: "gpt-5.
|
|
2462
|
-
modelContextWindow:
|
|
2520
|
+
model: "gpt-5.6-sol",
|
|
2521
|
+
modelContextWindow: 372000,
|
|
2463
2522
|
modelReasoningEffort: "high",
|
|
2464
2523
|
planModeReasoningEffort: "xhigh"
|
|
2465
2524
|
},
|
|
2466
2525
|
managedProfiles: [
|
|
2526
|
+
{
|
|
2527
|
+
model: "gpt-5.5",
|
|
2528
|
+
modelContextWindow: 400000,
|
|
2529
|
+
modelReasoningEffort: "high",
|
|
2530
|
+
planModeReasoningEffort: "xhigh"
|
|
2531
|
+
},
|
|
2467
2532
|
{
|
|
2468
2533
|
model: "gpt-5.5",
|
|
2469
2534
|
modelContextWindow: 1e6,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
|
|
9
9
|
"commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
|
|
10
10
|
"timeout": 30,
|
|
11
|
-
"statusMessage": "(OmO 4.
|
|
11
|
+
"statusMessage": "(OmO 4.17.0) Checking Bootstrap Provisioning"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
|
|
10
10
|
"timeout": 5,
|
|
11
|
-
"statusMessage": "(OmO 4.
|
|
11
|
+
"statusMessage": "(OmO 4.17.0) Recommending Git Bash MCP"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"type": "command",
|
|
21
21
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
22
22
|
"timeout": 5,
|
|
23
|
-
"statusMessage": "(OmO 4.
|
|
23
|
+
"statusMessage": "(OmO 4.17.0) Resetting Git Bash MCP Reminder"
|
|
24
24
|
}
|
|
25
25
|
]
|
|
26
26
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## OVERVIEW
|
|
6
6
|
|
|
7
|
-
Codex `SubagentStop` hook component: the evidence gate for the `lazycodex-
|
|
7
|
+
Codex `SubagentStop` hook component: the evidence gate for the ultrawork implementation workers (`lazycodex-worker-low|medium|high`). When a worker stops without a valid evidence receipt, the hook emits `{"decision": "block", "reason": <directive>}` and Codex sends it back to work. Matcher is `^lazycodex-worker-(low|medium|high)$`; read-only roles like `lazycodex-qa-executor` and `lazycodex-gate-reviewer` (same `ultrawork/agents/` family) are NOT gated by this hook. (The historical `lazycodex-executor` agent was removed; this component keeps its name.)
|
|
8
8
|
|
|
9
9
|
Valid receipt: `last_assistant_message` contains `EVIDENCE_RECORDED: <path>` where `<path>` resolves to a non-empty regular file strictly inside `<cwd>/.omo/evidence/`. Symlinks and directories rejected; containment checked on realpaths (file inside evidence root inside cwd, traversal-safe). A valid receipt clears attempt state and exits silently.
|
|
10
10
|
|
|
@@ -30,7 +30,7 @@ Escape hatches: after 3 blocked attempts (`MAX_ATTEMPTS`) the stop passes and st
|
|
|
30
30
|
| Change the block message | `directive.md`; keep both `{{...}}` placeholders and the literal `EVIDENCE_RECORDED: <path>` final-line contract |
|
|
31
31
|
| Change receipt validation | `src/codex-hook.ts` (`hasValidEvidenceReceipt`, `extractEvidencePath`, `isNonEmptyFileInsideEvidenceRoot`) |
|
|
32
32
|
| Change the retry budget | `src/state.ts` `MAX_ATTEMPTS` |
|
|
33
|
-
|
|
|
33
|
+
| Worker-side contract | `../ultrawork/agents/lazycodex-worker-{low,medium,high}.toml` instruct the final `EVIDENCE_RECORDED: <path>` line this hook parses |
|
|
34
34
|
| Plugin-level wiring | `../../hooks/subagent-stop-verifying-lazycodex-executor-evidence.json` (adds `commandWindows` via `../bootstrap/scripts/node-dispatch.ps1`) |
|
|
35
35
|
| Wiring + contract tests | `../../test/aggregate-hooks.test.mjs`, `../../test/component-hook-contract-cases.mjs`, `../../test/hook-status-message.test.mjs`, `../../test/component-bundled-cli.test.mjs` |
|
|
36
36
|
|
|
@@ -66,11 +66,15 @@ function isRecord(value) {
|
|
|
66
66
|
var SUBAGENT_STOP_EVENT = "SubagentStop";
|
|
67
67
|
|
|
68
68
|
// components/lazycodex-executor-verify/src/codex-hook.ts
|
|
69
|
-
var
|
|
69
|
+
var RECEIPT_ENFORCED_AGENTS = new Set([
|
|
70
|
+
"lazycodex-worker-low",
|
|
71
|
+
"lazycodex-worker-medium",
|
|
72
|
+
"lazycodex-worker-high"
|
|
73
|
+
]);
|
|
70
74
|
function runSubagentStopHook(input, fs) {
|
|
71
75
|
if (!isSubagentStopInput(input))
|
|
72
76
|
return "";
|
|
73
|
-
if (input.agent_type
|
|
77
|
+
if (!RECEIPT_ENFORCED_AGENTS.has(input.agent_type))
|
|
74
78
|
return "";
|
|
75
79
|
if (transcriptHasContextPressureMarker(input.transcript_path, fs))
|
|
76
80
|
return "";
|
|
@@ -3,11 +3,15 @@ import { isAbsolute, relative, resolve } from "node:path";
|
|
|
3
3
|
import { renderDirective } from "./directive.js";
|
|
4
4
|
import { clearAttemptState, MAX_ATTEMPTS, readAttemptState, writeAttemptState } from "./state.js";
|
|
5
5
|
import { SUBAGENT_STOP_EVENT } from "./types.js";
|
|
6
|
-
const
|
|
6
|
+
const RECEIPT_ENFORCED_AGENTS = new Set([
|
|
7
|
+
"lazycodex-worker-low",
|
|
8
|
+
"lazycodex-worker-medium",
|
|
9
|
+
"lazycodex-worker-high",
|
|
10
|
+
]);
|
|
7
11
|
export function runSubagentStopHook(input, fs) {
|
|
8
12
|
if (!isSubagentStopInput(input))
|
|
9
13
|
return "";
|
|
10
|
-
if (input.agent_type
|
|
14
|
+
if (!RECEIPT_ENFORCED_AGENTS.has(input.agent_type))
|
|
11
15
|
return "";
|
|
12
16
|
if (transcriptHasContextPressureMarker(input.transcript_path, fs))
|
|
13
17
|
return "";
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"hooks": {
|
|
3
3
|
"SubagentStop": [
|
|
4
4
|
{
|
|
5
|
-
"matcher": "^lazycodex-
|
|
5
|
+
"matcher": "^lazycodex-worker-(low|medium|high)$",
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 4.
|
|
11
|
+
"statusMessage": "(OmO 4.17.0) Verifying LazyCodex Executor Evidence"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -6,11 +6,15 @@ import { clearAttemptState, MAX_ATTEMPTS, readAttemptState, writeAttemptState }
|
|
|
6
6
|
import type { HookFileSystem, StopHookOutput, SubagentStopInput } from "./types.js";
|
|
7
7
|
import { SUBAGENT_STOP_EVENT } from "./types.js";
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const RECEIPT_ENFORCED_AGENTS = new Set([
|
|
10
|
+
"lazycodex-worker-low",
|
|
11
|
+
"lazycodex-worker-medium",
|
|
12
|
+
"lazycodex-worker-high",
|
|
13
|
+
]);
|
|
10
14
|
|
|
11
15
|
export function runSubagentStopHook(input: unknown, fs: HookFileSystem): string {
|
|
12
16
|
if (!isSubagentStopInput(input)) return "";
|
|
13
|
-
if (input.agent_type
|
|
17
|
+
if (!RECEIPT_ENFORCED_AGENTS.has(input.agent_type)) return "";
|
|
14
18
|
if (transcriptHasContextPressureMarker(input.transcript_path, fs)) return "";
|
|
15
19
|
if (hasValidEvidenceReceipt(input, fs)) {
|
|
16
20
|
clearAttemptState(input.cwd, input.session_id, input.agent_id, fs);
|
|
@@ -110,7 +110,7 @@ function createPayload(
|
|
|
110
110
|
): Record<string, string | boolean> {
|
|
111
111
|
return {
|
|
112
112
|
hook_event_name: "SubagentStop",
|
|
113
|
-
agent_type: "lazycodex-
|
|
113
|
+
agent_type: "lazycodex-worker-medium",
|
|
114
114
|
agent_id: "agent_1",
|
|
115
115
|
session_id: "sess.1",
|
|
116
116
|
cwd,
|
package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts
CHANGED
|
@@ -299,7 +299,7 @@ function existingReceiptTargetOutsideEvidenceRoot(): string {
|
|
|
299
299
|
function createInput(cwd: string, overrides: Partial<SubagentStopInput> = {}): SubagentStopInput {
|
|
300
300
|
return {
|
|
301
301
|
hook_event_name: "SubagentStop",
|
|
302
|
-
agent_type: "lazycodex-
|
|
302
|
+
agent_type: "lazycodex-worker-medium",
|
|
303
303
|
agent_id: "agent_1",
|
|
304
304
|
session_id: "sess.1",
|
|
305
305
|
cwd,
|
|
@@ -315,7 +315,7 @@ function createInput(cwd: string, overrides: Partial<SubagentStopInput> = {}): S
|
|
|
315
315
|
function createUnknownEventInput(cwd: string): Record<string, string | boolean> {
|
|
316
316
|
return {
|
|
317
317
|
hook_event_name: "Stop",
|
|
318
|
-
agent_type: "lazycodex-
|
|
318
|
+
agent_type: "lazycodex-worker-medium",
|
|
319
319
|
agent_id: "agent_1",
|
|
320
320
|
session_id: "sess.1",
|
|
321
321
|
cwd,
|
|
@@ -344,3 +344,68 @@ function isBlockOutput(value: unknown): value is BlockOutput {
|
|
|
344
344
|
typeof value.reason === "string"
|
|
345
345
|
);
|
|
346
346
|
}
|
|
347
|
+
|
|
348
|
+
describe("tier worker receipt enforcement", () => {
|
|
349
|
+
// given the matcher set now covers the difficulty-tier workers
|
|
350
|
+
const workerTypes = ["lazycodex-worker-low", "lazycodex-worker-medium", "lazycodex-worker-high"] as const;
|
|
351
|
+
|
|
352
|
+
for (const agentType of workerTypes) {
|
|
353
|
+
it(`#given no evidence receipt #when a ${agentType} child stops #then blocks`, () => {
|
|
354
|
+
// given
|
|
355
|
+
const cwd = createWorkspace();
|
|
356
|
+
|
|
357
|
+
// when
|
|
358
|
+
const output = runSubagentStopHook(createInput(cwd, { agent_type: agentType }), nodeFileSystem);
|
|
359
|
+
|
|
360
|
+
// then
|
|
361
|
+
expect(parseBlockOutput(output).decision).toBe("block");
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
it("#given no evidence receipt #when an explorer child stops #then no-ops", () => {
|
|
366
|
+
// given
|
|
367
|
+
const cwd = createWorkspace();
|
|
368
|
+
|
|
369
|
+
// when
|
|
370
|
+
const output = runSubagentStopHook(createInput(cwd, { agent_type: "explorer" }), nodeFileSystem);
|
|
371
|
+
|
|
372
|
+
// then
|
|
373
|
+
expect(output).toBe("");
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
it("#given both hook manifests #when their matchers are applied #then enforced agents match and read-only roles do not", () => {
|
|
377
|
+
// given
|
|
378
|
+
const componentManifest = JSON.parse(
|
|
379
|
+
readFileSync(new URL("../hooks/hooks.json", import.meta.url), "utf8"),
|
|
380
|
+
);
|
|
381
|
+
const rootManifest = JSON.parse(
|
|
382
|
+
readFileSync(
|
|
383
|
+
new URL("../../../hooks/subagent-stop-verifying-lazycodex-executor-evidence.json", import.meta.url),
|
|
384
|
+
"utf8",
|
|
385
|
+
),
|
|
386
|
+
);
|
|
387
|
+
for (const manifest of [componentManifest, rootManifest]) {
|
|
388
|
+
const matcher = new RegExp(manifest.hooks.SubagentStop[0].matcher);
|
|
389
|
+
|
|
390
|
+
// then
|
|
391
|
+
for (const name of workerTypes) expect(matcher.test(name)).toBe(true);
|
|
392
|
+
expect(matcher.test("lazycodex-executor")).toBe(false);
|
|
393
|
+
expect(matcher.test("explorer")).toBe(false);
|
|
394
|
+
expect(matcher.test("lazycodex-gate-reviewer")).toBe(false);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
it("#given the tier worker TOMLs #when inspected #then each instructs the EVIDENCE_RECORDED receipt line", () => {
|
|
399
|
+
for (const tier of ["low", "medium", "high"]) {
|
|
400
|
+
// when
|
|
401
|
+
const toml = readFileSync(
|
|
402
|
+
new URL(`../../ultrawork/agents/lazycodex-worker-${tier}.toml`, import.meta.url),
|
|
403
|
+
"utf8",
|
|
404
|
+
);
|
|
405
|
+
|
|
406
|
+
// then
|
|
407
|
+
expect(toml).toContain("EVIDENCE_RECORDED: <path>");
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
10
10
|
"timeout": 60,
|
|
11
|
-
"statusMessage": "(OmO 4.
|
|
11
|
+
"statusMessage": "(OmO 4.17.0) Checking LSP Diagnostics"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"type": "command",
|
|
22
22
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
23
23
|
"timeout": 5,
|
|
24
|
-
"statusMessage": "(OmO 4.
|
|
24
|
+
"statusMessage": "(OmO 4.17.0) Resetting LSP Diagnostics Cache"
|
|
25
25
|
}
|
|
26
26
|
]
|
|
27
27
|
}
|
|
@@ -56,17 +56,4 @@ describe("plugin package metadata", () => {
|
|
|
56
56
|
expect(codexHookSource).not.toContain("../../../../../lsp-daemon");
|
|
57
57
|
expect(sourceFiles.filter((name) => name.startsWith("lazy-mcp") || name === "lazy-lsp-mcp.ts")).toEqual([]);
|
|
58
58
|
});
|
|
59
|
-
|
|
60
|
-
it("#given LSP skill guidance #when validating MCP tool instructions #then tool names are not framed as shell commands", () => {
|
|
61
|
-
// given
|
|
62
|
-
const skill = readTextFile("skills/lsp/SKILL.md");
|
|
63
|
-
|
|
64
|
-
// when
|
|
65
|
-
const mentionsToolInterface = skill.includes("through the tool interface");
|
|
66
|
-
const rejectsShellExecution = skill.includes("not shell commands");
|
|
67
|
-
|
|
68
|
-
// then
|
|
69
|
-
expect(mentionsToolInterface).toBe(true);
|
|
70
|
-
expect(rejectsShellExecution).toBe(true);
|
|
71
|
-
});
|
|
72
59
|
});
|
|
@@ -19,7 +19,7 @@ Status requests are not stop signals: give the update, keep working. Honor every
|
|
|
19
19
|
|
|
20
20
|
# Discovery
|
|
21
21
|
|
|
22
|
-
Never speculate about code you have not read: verify with tools and re-read on every hand-off. Start broad once: independent
|
|
22
|
+
Never speculate about code you have not read: verify with tools and re-read on every hand-off. Start broad once - and WIDE: tool calls run as JavaScript through `exec`, so write programs, not single calls. Batch EVERY independent read, search, and doc lookup into ONE `exec` script via `Promise.all` over the `tools` object before the first edit; filter and reduce results in-script so only what you need returns to context. NEVER await independent calls one at a time - sequence only when one result feeds the next. Retrieve again only when the core question is open, a needed fact is missing, or a second-order question (callers, error paths, ownership) changes the design. Stop when you can act. Prefer the root fix over the symptom fix.
|
|
23
23
|
|
|
24
24
|
# Operating Loop
|
|
25
25
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"type": "command",
|
|
8
8
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
|
|
9
9
|
"timeout": 10,
|
|
10
|
-
"statusMessage": "(OmO 4.
|
|
10
|
+
"statusMessage": "(OmO 4.17.0) Loading Project Rules"
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"type": "command",
|
|
20
20
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
|
|
21
21
|
"timeout": 10,
|
|
22
|
-
"statusMessage": "(OmO 4.
|
|
22
|
+
"statusMessage": "(OmO 4.17.0) Loading Project Rules"
|
|
23
23
|
}
|
|
24
24
|
]
|
|
25
25
|
}
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"type": "command",
|
|
33
33
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
34
34
|
"timeout": 10,
|
|
35
|
-
"statusMessage": "(OmO 4.
|
|
35
|
+
"statusMessage": "(OmO 4.17.0) Matching Project Rules"
|
|
36
36
|
}
|
|
37
37
|
]
|
|
38
38
|
}
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"type": "command",
|
|
46
46
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
|
|
47
47
|
"timeout": 10,
|
|
48
|
-
"statusMessage": "(OmO 4.
|
|
48
|
+
"statusMessage": "(OmO 4.17.0) Resetting Project Rule Cache"
|
|
49
49
|
}
|
|
50
50
|
]
|
|
51
51
|
}
|