lazycodex-ai 5.0.0-beta.9 → 5.0.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/README.ja.md +64 -69
- package/README.ko.md +65 -70
- package/README.md +108 -182
- package/README.ru.md +60 -68
- package/README.zh-cn.md +60 -69
- package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
- package/dist/cli/config-manager/refresh-opencode-plugin-sandbox.d.ts +31 -0
- package/dist/cli/doctor/checks/browser-provider.d.ts +2 -0
- package/dist/cli/doctor/checks/index.d.ts +2 -0
- package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
- package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
- package/dist/cli/doctor/checks/tui-plugin-config.d.ts +11 -0
- package/dist/cli/doctor/framework/constants.d.ts +5 -0
- package/dist/cli/doctor/framework/types.d.ts +2 -0
- package/dist/cli/fallback-lane-policy.d.ts +1 -0
- package/dist/cli/index.js +60340 -63161
- package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
- package/dist/cli/install-native/index.d.ts +12 -0
- package/dist/cli/install-native/legacy-omo-bin.d.ts +27 -0
- package/dist/cli/install-native/offer-native-setup.d.ts +31 -0
- package/dist/cli/install-native/omo-bin-test-fixtures.d.ts +35 -0
- package/dist/cli/install-native/plan.d.ts +21 -0
- package/dist/cli/install-native/repair-legacy-omo-bin.d.ts +26 -0
- package/dist/cli/install-native/run-native-install.d.ts +33 -0
- package/dist/cli/install-native/verify-omo-command.d.ts +22 -0
- package/dist/cli/install-native-dev/index.d.ts +4 -0
- package/dist/cli/native-dev-platform-flag.d.ts +5 -0
- package/dist/cli/native-edition-hint.d.ts +10 -0
- package/dist/cli/runtime-commands.d.ts +1 -1
- package/dist/cli/types.d.ts +3 -2
- 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 +61667 -64465
- package/package.json +15 -14
- package/packages/git-bash-mcp/dist/cli.js +6 -1
- package/packages/lsp-daemon/dist/cli.js +1421 -960
- package/packages/lsp-daemon/dist/client.d.ts +10 -0
- package/packages/lsp-daemon/dist/client.js +956 -498
- package/packages/lsp-daemon/dist/daemon-client.d.ts +3 -0
- package/packages/lsp-daemon/dist/daemon-client.js +23 -3
- package/packages/lsp-daemon/dist/ensure-daemon.d.ts +6 -1
- package/packages/lsp-daemon/dist/ensure-daemon.js +27 -5
- package/packages/lsp-daemon/dist/index.js +860 -407
- package/packages/lsp-daemon/dist/ownership.js +2 -2
- package/packages/lsp-daemon/dist/proxy.js +3 -0
- package/packages/lsp-daemon/dist/version-reap.js +1 -1
- package/packages/lsp-daemon/package.json +5 -4
- package/packages/lsp-tools-mcp/dist/cli.js +764 -341
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +274 -138
- package/packages/lsp-tools-mcp/dist/mcp.js +789 -368
- package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
- package/packages/lsp-tools-mcp/dist/tools.js +719 -302
- package/packages/lsp-tools-mcp/package.json +5 -4
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
- package/packages/omo-codex/plugin/.mcp.json +0 -6
- package/packages/omo-codex/plugin/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/README.md +6 -2
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8504 -408
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/src/hook.ts +1 -0
- package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -1
- package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
- package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
- package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +6 -5
- package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
- package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
- package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
- package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/git-bash/dist/cli.js +1 -1
- package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
- package/packages/omo-codex/plugin/components/git-bash/src/codex-hook.ts +2 -1
- package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +6 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +32 -28
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +134 -11
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +7 -5
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-report-bug/SKILL.md +5 -5
- 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 +977 -545
- 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 +6 -5
- package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
- package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
- package/packages/omo-codex/plugin/components/rules/README.md +2 -0
- package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +5 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +127 -0
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +103 -68
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +8 -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 +27 -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.test.ts +1 -2
- 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 +2 -3
- package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +38 -3
- package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
- package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +29 -6
- package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
- package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
- package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -2
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +6 -5
- package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +1 -1
- 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 +5328 -1382
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +5524 -1579
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +6 -5
- package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
- package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
- package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
- package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
- package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
- package/packages/omo-codex/plugin/components/ultrawork/README.md +3 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +20 -7
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +478 -4
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +6 -6
- package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +9 -10
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +17 -13
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +5 -6
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
- package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
- package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +4 -4
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +6 -6
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +13 -13
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -0
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +13 -12
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +4 -4
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +4 -8
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +22 -6
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +17 -1
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +102 -107
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +30 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +57 -46
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2205 -737
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +28 -8
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +8 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +35 -23
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +25 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +24 -12
- package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.d.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +39 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +19 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.d.ts +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +108 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +6 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +54 -25
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +10 -7
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +121 -100
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +16 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +115 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +41 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +72 -117
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +25 -13
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +157 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +381 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +127 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +130 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.d.ts +5 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-budget-io.js +67 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +190 -59
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +259 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +41 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-batch.js +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +11 -11
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +28 -23
- package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +21 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +100 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +7 -6
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +7 -2
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +34 -11
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +52 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +59 -77
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +52 -46
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +51 -33
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +27 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +23 -16
- package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +38 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +32 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +132 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +67 -54
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +140 -119
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +112 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +61 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +71 -15
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +92 -136
- package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +38 -13
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +218 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +156 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +143 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-budget-io.ts +59 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +201 -52
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +257 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +45 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-batch.ts +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +12 -10
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +27 -22
- package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +133 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +131 -82
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +35 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +88 -11
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/barrier.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/cli-session.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-child.ts +65 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-cli-qa.mjs +76 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-crash.ts +23 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-mutations.mjs +58 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/commit-writer.ts +65 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/lease-clock.ts +23 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +3 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-log.test.ts +252 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-commit-recovery.test.ts +190 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io-cross-process.test.ts +106 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +74 -25
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-newest.test.ts +72 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-fields-messages.test.ts +98 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +51 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +58 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-completed-plan.test.ts +43 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +174 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +169 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard-native-reviewer.test.ts +207 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +452 -7
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +310 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/status-next-actions-surface.test.ts +133 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering-batch.test.ts +12 -12
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +12 -6
- 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 +113 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +9 -3
- package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +18 -0
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/model-catalog.json +16 -7
- package/packages/omo-codex/plugin/package-lock.json +992 -681
- package/packages/omo-codex/plugin/package.json +6 -3
- package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
- package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
- package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
- package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
- package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.d.mts +4 -0
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +114 -67
- package/packages/omo-codex/plugin/shared/package.json +3 -4
- package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
- package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
- package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
- package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
- package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +13 -1
- package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +37 -0
- package/packages/omo-codex/plugin/skills/browser/SKILL.md +109 -0
- package/packages/omo-codex/plugin/skills/browser/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/browser/references/commands.md +105 -0
- package/packages/omo-codex/plugin/skills/browser/references/install.md +97 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +62 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +61 -0
- package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +62 -0
- package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +61 -0
- package/packages/omo-codex/plugin/skills/browser/references/remote.md +25 -0
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +57 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +50 -0
- package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -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 +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 +5 -3
- 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 +26 -5
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
- 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/browser-qa.md +104 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
- package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +10 -0
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +8 -3
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +13 -4
- package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +146 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/aside.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +30 -6
- package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +19 -5
- package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -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/frontend/references/perfection/README.md +1 -0
- package/packages/omo-codex/plugin/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
- package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +20 -18
- package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +7 -5
- package/packages/omo-codex/plugin/skills/lcx-report-bug/SKILL.md +5 -5
- package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
- package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
- package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
- package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
- package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
- package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
- package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
- package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
- package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
- package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
- package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
- package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
- package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
- package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
- package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +11 -9
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +11 -9
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +40 -28
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +2 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +2 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +14 -7
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +102 -107
- package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +38 -39
- package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +31 -2
- package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +34 -11
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +9 -10
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +17 -13
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +5 -6
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
- package/packages/omo-codex/plugin/skills/ulw-research/AGENTS.md +63 -0
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +52 -33
- package/packages/omo-codex/plugin/skills/ulw-research/references/deliverable-phase.md +187 -0
- package/packages/omo-codex/plugin/skills/ulw-research/references/report-gates.md +66 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/cli-support.mjs +102 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/contracts.mjs +162 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/css-lite.mjs +204 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/design-spec.mjs +161 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/entities.mjs +39 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/entry-guard.mjs +21 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/format-extract.mjs +229 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-figures.mjs +173 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-layout.mjs +146 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-static.mjs +167 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-structure.mjs +118 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/gates-text.mjs +190 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/html-lite.mjs +239 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/layout-probe.mjs +83 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/outcome.mjs +250 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
- package/packages/omo-codex/plugin/skills/ulw-research/scripts/report-tools.mjs +61 -0
- package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
- package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +77 -0
- package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +12 -12
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +13 -28
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
- package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +14 -4
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -29
- package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
- package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
- package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +100 -2
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
- package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +35 -35
- package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +81 -3
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +57 -26
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +37 -0
- package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -2
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +16238 -4291
- package/packages/{omo-codex/plugin/components/ultrawork/directive.md → prompts-core/prompts/ultrawork/codex.md} +102 -107
- package/packages/shared-skills/package.json +7 -1
- package/packages/shared-skills/skill-source-filter.d.ts +16 -0
- package/packages/shared-skills/skill-source-filter.mjs +44 -0
- package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
- package/packages/shared-skills/skills/ast-grep/SKILL.md +13 -1
- package/packages/shared-skills/skills/browser/ATTRIBUTION.md +37 -0
- package/packages/shared-skills/skills/browser/SKILL.md +109 -0
- package/packages/shared-skills/skills/browser/references/commands.md +105 -0
- package/packages/shared-skills/skills/browser/references/install.md +97 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/README.md +62 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +52 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +61 -0
- package/packages/shared-skills/skills/browser/references/owned-engine/network.md +62 -0
- package/packages/shared-skills/skills/browser/references/recipes/1password.md +61 -0
- package/packages/shared-skills/skills/browser/references/remote.md +25 -0
- package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
- package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
- package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +57 -0
- package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +50 -0
- package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
- package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
- package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
- package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
- package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
- package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
- package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
- package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
- package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
- package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
- package/packages/shared-skills/skills/debugging/SKILL.md +5 -3
- package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
- package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +26 -5
- package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
- package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
- 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/browser-qa.md +104 -0
- package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
- package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
- package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +10 -0
- package/packages/shared-skills/skills/frontend/SKILL.md +8 -3
- package/packages/shared-skills/skills/frontend/references/design/README.md +13 -4
- package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
- package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +146 -0
- package/packages/shared-skills/skills/frontend/references/design/aside.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +30 -6
- package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +19 -5
- package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -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/frontend/references/perfection/README.md +1 -0
- package/packages/shared-skills/skills/frontend/scripts/perfection/lighthouse-audit.py +2 -2
- package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
- package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
- package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
- package/packages/shared-skills/skills/programming/SKILL.md +12 -18
- package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
- package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
- package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
- package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
- package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
- package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
- package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
- package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
- package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
- package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
- package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
- package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
- package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
- package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
- package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
- package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
- package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
- package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
- package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
- package/packages/shared-skills/skills/refactor/SKILL.md +5 -5
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +5 -5
- package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +1 -82
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +40 -28
- package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +2 -1
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +2 -2
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +5 -2
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +8 -6
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_stealth.py +86 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +4 -7
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +34 -111
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +14 -7
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +22 -36
- package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +3 -3
- package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +27 -25
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +10 -11
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +18 -13
- package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +5 -6
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
- package/packages/shared-skills/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
- package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -153
- package/packages/shared-skills/skills/ulw-research/AGENTS.md +63 -0
- package/packages/shared-skills/skills/ulw-research/SKILL.md +47 -30
- package/packages/shared-skills/skills/ulw-research/references/deliverable-phase.md +187 -0
- package/packages/shared-skills/skills/ulw-research/references/report-gates.md +66 -0
- package/packages/shared-skills/skills/ulw-research/scripts/cli-support.mjs +102 -0
- package/packages/shared-skills/skills/ulw-research/scripts/cli-support.test.ts +88 -0
- package/packages/shared-skills/skills/ulw-research/scripts/contracts.mjs +162 -0
- package/packages/shared-skills/skills/ulw-research/scripts/contracts.test.ts +177 -0
- package/packages/shared-skills/skills/ulw-research/scripts/css-lite.mjs +204 -0
- package/packages/shared-skills/skills/ulw-research/scripts/css-lite.test.ts +159 -0
- package/packages/shared-skills/skills/ulw-research/scripts/design-spec.mjs +161 -0
- package/packages/shared-skills/skills/ulw-research/scripts/design-spec.test.ts +162 -0
- package/packages/shared-skills/skills/ulw-research/scripts/entities.mjs +39 -0
- package/packages/shared-skills/skills/ulw-research/scripts/entry-guard.mjs +21 -0
- package/packages/shared-skills/skills/ulw-research/scripts/format-extract-css.mjs +122 -0
- package/packages/shared-skills/skills/ulw-research/scripts/format-extract.mjs +229 -0
- package/packages/shared-skills/skills/ulw-research/scripts/format-extract.test.ts +243 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-figures.mjs +173 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.mjs +146 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-layout.test.ts +236 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-static.mjs +167 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-static.test.ts +265 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-structure.mjs +118 -0
- package/packages/shared-skills/skills/ulw-research/scripts/gates-text.mjs +190 -0
- package/packages/shared-skills/skills/ulw-research/scripts/glossary-vocabulary.test.ts +43 -0
- package/packages/shared-skills/skills/ulw-research/scripts/html-lite.mjs +239 -0
- package/packages/shared-skills/skills/ulw-research/scripts/html-lite.test.ts +191 -0
- package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.mjs +83 -0
- package/packages/shared-skills/skills/ulw-research/scripts/layout-probe.test.ts +89 -0
- package/packages/shared-skills/skills/ulw-research/scripts/outcome.mjs +250 -0
- package/packages/shared-skills/skills/ulw-research/scripts/outcome.test.ts +281 -0
- package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.mjs +171 -0
- package/packages/shared-skills/skills/ulw-research/scripts/repair-tracker.test.ts +246 -0
- package/packages/shared-skills/skills/ulw-research/scripts/report-tools-commands.mjs +214 -0
- package/packages/shared-skills/skills/ulw-research/scripts/report-tools.mjs +61 -0
- package/packages/shared-skills/skills/ulw-research/scripts/report-tools.test.ts +213 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/assets/figure-1.svg +1 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/bad-report.html +44 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/boxes.json +90 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/design-spec.md +29 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/good-report.html +57 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference-report.html +86 -0
- package/packages/shared-skills/skills/ulw-research/scripts/tests/fixtures/reference.md +23 -0
- package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
- package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +77 -0
- package/script/qa/web-terminal-visual-qa.mjs +2 -0
- package/script/qa/xterm-live-terminal.mjs +18 -2
- package/dist/cli/install-senpi/index.d.ts +0 -1
- package/dist/cli/senpi-platform-flag.d.ts +0 -4
- package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
- package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
- package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
- package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12244
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9842
- package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
- package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
- package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
- package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
- package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
- package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
- package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
- package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
- package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
- package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
- package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
- package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
- package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
- package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
- package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
- package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
- package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
- package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
- package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
- package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
- package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
- package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
- package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
- package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +0 -484
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
- package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
- package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
- package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
- package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
- package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -194
- package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
- package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
- package/packages/omo-codex/plugin/skills/visual-qa/references/agent-browser-setup.md +0 -45
- package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
- package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
- package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
- package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
- package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
- package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
- package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -194
- package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
- package/packages/shared-skills/skills/visual-qa/references/agent-browser-setup.md +0 -45
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
- /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser
|
|
3
|
+
description: "Drives a real browser through the omowright library from the js eval kernel: sites the user is already signed into, forms and clicks, JS-rendered pages, screenshots, web QA, extension popups, a human handoff for login, CAPTCHA or OTP, and a browser you own for scraping, bot-scored targets, network capture and QA traces. Use for any interactive browser task; not for a plain search or an unblocked static fetch."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Browser
|
|
7
|
+
|
|
8
|
+
One library, two engines. omowright ships inside this skill; choose the engine before you act:
|
|
9
|
+
|
|
10
|
+
| You need | Engine | Entry point |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| A site the user is signed into, their open tabs, a form, a click-through, a screenshot, web QA, an extension popup | **attached** — the user's own browser through BrowserSkill | `connectBrowserSkill()` |
|
|
13
|
+
| A throwaway profile, bot-scoring evasion, a CAPTCHA, network interception, a QA flight trace, coordinate control, headless runs | **owned** — a browser your code launches | `connectPipe()` / `connectCloakProfile()` — [references/owned-engine/README.md](references/owned-engine/README.md) |
|
|
14
|
+
| Text out of a URL, a 403 bypass, a platform that blocks fetchers | neither | the `ultimate-browsing` skill |
|
|
15
|
+
|
|
16
|
+
**Attached is the default,** because it is the only engine carrying the user's logins and the only
|
|
17
|
+
one where a human is a single call away. Never substitute one engine for the other silently: if
|
|
18
|
+
the attached engine is not set up, run the onboarding script and tell the user its one remaining
|
|
19
|
+
step.
|
|
20
|
+
|
|
21
|
+
## Step 0 — load omowright and prove the stack
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
const { loadOmowright } = await import("<skill-root>/scripts/omowright.mjs")
|
|
25
|
+
const { omowright } = await loadOmowright() // { connectBrowserSkill, bskSnapshot, connectPipe, ... }
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
node "<skill-root>/scripts/browser-doctor.mjs" --json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
| State | Meaning | Next |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `ready` | CLI, daemon and a connected browser | start a session |
|
|
35
|
+
| `no-cli` / `no-daemon` / `no-extension` | something is missing | `node "<skill-root>/scripts/browser-install.mjs" [--browser=<id>]` prepares everything it can for **the browser the user uses**, then prints the **single** step only the user can do (relaunch that browser and click **Enable**); relay it verbatim, wait, re-run the doctor |
|
|
36
|
+
| `choose-browser` | the signals do not single out one browser (Safari/Firefox default, an idle default while another browser runs, several in use) | nothing was installed; take the browser from memory or ask the user, then `browser-install.mjs --browser=<id>` |
|
|
37
|
+
| `no-browser-support` | no Chromium-family profile on this machine | say so and stop |
|
|
38
|
+
|
|
39
|
+
**Install into the browser the user actually uses, never into whatever happens to be on disk.** Before
|
|
40
|
+
installing, check your memory for the user's browser; otherwise read the doctor's `browser` (picked
|
|
41
|
+
from the OS default browser, running apps and recent use — `candidates` shows the evidence). If memory
|
|
42
|
+
and the doctor disagree, or the doctor says `choose-browser`, ask the user. Pass the answer as
|
|
43
|
+
`--browser=<id>` and record it in memory. A Chrome that is merely installed is not their browser.
|
|
44
|
+
|
|
45
|
+
**Never launch a headless browser because the attached one is missing.** It has none of the
|
|
46
|
+
user's sessions, so every login turns into a ladder you should not be climbing. Say which state
|
|
47
|
+
you hit and ask.
|
|
48
|
+
|
|
49
|
+
## The loop (attached)
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
const session = await omowright.connectBrowserSkill({ name: "<task>", focused: false })
|
|
53
|
+
try {
|
|
54
|
+
await session.navigate("https://example.com/", { waitUntil: "load" })
|
|
55
|
+
const { tree, refs, css } = await omowright.bskSnapshot(session, { interactive: true }) // OmOWright tree + refs, no trace in the page
|
|
56
|
+
await session.click({ selector: css.e3 }) // css[ref] is null inside shadow roots:
|
|
57
|
+
const vom = await session.observe({ maxTokens: 4000 }) // then read the daemon's own tree ...
|
|
58
|
+
await session.click("@e7") // ... and click its @eN ref
|
|
59
|
+
await session.fill(css.e5, "hello")
|
|
60
|
+
await session.press("Enter")
|
|
61
|
+
await session.waitForNavigation({ waitUntil: "load" })
|
|
62
|
+
const shot = await session.screenshot() // { buffer, width, height, captureId }
|
|
63
|
+
} finally {
|
|
64
|
+
await session.stop() // success AND failure; returns borrowed tabs
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
1. **Read before every action.** `bskSnapshot` refs and `observe` `@eN` refs are reissued on each
|
|
69
|
+
call; use a ref in the same cycle you read it.
|
|
70
|
+
2. **Navigation and large DOM changes stale every ref.** Read again rather than reusing.
|
|
71
|
+
3. **Two identical failures mean change approach, not retry.** A third identical attempt is a defect.
|
|
72
|
+
4. **Borrow a user tab explicitly** (`tabList({ scope: "user" })`, `tabBorrow(id)`, `tabReturn(id)`).
|
|
73
|
+
Borrowing prompts the user; never invent tab ids and never repeat a denied borrow.
|
|
74
|
+
5. **Always `stop()` the session,** on success and on failure.
|
|
75
|
+
|
|
76
|
+
Every method, its options, and the failure codes are in [references/commands.md](references/commands.md).
|
|
77
|
+
|
|
78
|
+
## When a human is the only way through
|
|
79
|
+
|
|
80
|
+
Login, CAPTCHA, OTP, a payment confirmation, a consent dialog:
|
|
81
|
+
|
|
82
|
+
```js
|
|
83
|
+
const outcome = await session.requestHelp({ prompt: "<what you need done>", targets: ["@e4"], timeoutMs: 300_000 })
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Then read the page again. Respect a `cancelled` or `timed_out` outcome; do not work around it by
|
|
87
|
+
changing the extension's automation settings.
|
|
88
|
+
|
|
89
|
+
## Rules
|
|
90
|
+
|
|
91
|
+
- **Never read credentials through the page.** No `evaluate` that extracts a password, token,
|
|
92
|
+
cookie or recovery code. The value of the attached engine is that the browser is already signed in.
|
|
93
|
+
- **Never clear cookies, cache or site data.** It is the user's real profile; clearing it logs them
|
|
94
|
+
out everywhere. No flow here needs it.
|
|
95
|
+
- **`focused: false` by default.** The browser belongs to someone who is probably using it.
|
|
96
|
+
- **One short, named session per task,** always stopped.
|
|
97
|
+
- **Bot-scored or WAF targets go to the owned engine.** The attached engine's daemon enables console
|
|
98
|
+
capture on every tab it drives, which is a known automation signal; CloakBrowser through
|
|
99
|
+
`connectCloakProfile()` is the stealth path.
|
|
100
|
+
|
|
101
|
+
## Where the rest lives
|
|
102
|
+
|
|
103
|
+
| Topic | Read |
|
|
104
|
+
|---|---|
|
|
105
|
+
| Session methods, targets, options, error codes | [references/commands.md](references/commands.md) |
|
|
106
|
+
| Installing: CLI, daemon, extension, the one human step, blocklisted extension | [references/install.md](references/install.md) |
|
|
107
|
+
| Agent on one machine, browser on another | [references/remote.md](references/remote.md) |
|
|
108
|
+
| Owned engine: launch, snapshot ladder, network, frames, human handoff | [references/owned-engine/README.md](references/owned-engine/README.md) |
|
|
109
|
+
| Reading a 1Password vault the user has unlocked | [references/recipes/1password.md](references/recipes/1password.md) |
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Session methods
|
|
2
|
+
|
|
3
|
+
`connectBrowserSkill()` returns a `BskSession`. Every method is one call on the BrowserSkill
|
|
4
|
+
daemon's tool surface; options are the daemon's parameter names in camelCase.
|
|
5
|
+
|
|
6
|
+
## Sessions
|
|
7
|
+
|
|
8
|
+
```js
|
|
9
|
+
const session = await omowright.connectBrowserSkill({ name: "<task>", focused: false, browser: "<instance id>", width: 1200, height: 800 })
|
|
10
|
+
session.sessionId // four letters, e.g. "ckhg"
|
|
11
|
+
session.browserInstanceId // which connected browser owns the Agent Window
|
|
12
|
+
await session.stop() // ALWAYS, on success and failure
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`browser` is needed only when more than one browser is connected (`bskDoctor()` lists them).
|
|
16
|
+
`focused: false` keeps the Agent Window from stealing focus; drop it only when the user is watching
|
|
17
|
+
on purpose. Throws `BskRpcError` `no_browser_connected` when no extension is attached — that is a
|
|
18
|
+
stop, not a cue to launch something else.
|
|
19
|
+
|
|
20
|
+
## Targets
|
|
21
|
+
|
|
22
|
+
| Form | Meaning |
|
|
23
|
+
|---|---|
|
|
24
|
+
| `"@e3"` / `"e3"` | a ref from the last `observe()` / `snapshot()` |
|
|
25
|
+
| `"#login > button"` | a CSS selector, resolved live |
|
|
26
|
+
| `{ captureId, x, y }` | a point in a screenshot, from `screenshot()` |
|
|
27
|
+
| `css.e3` from `bskSnapshot` | the light-DOM CSS path of an OmOWright ref (`null` inside shadow roots — use the daemon ref instead) |
|
|
28
|
+
|
|
29
|
+
## Reading
|
|
30
|
+
|
|
31
|
+
| Call | Returns |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `bskSnapshot(session, { interactive, maxDepth })` | `{ tree, refs, css }` — the OmOWright accessibility tree with refs, computed in the page **without** leaving a global or touching the DOM |
|
|
34
|
+
| `session.observe({ maxTokens, cursor, probeHover })` | the daemon's semantic tree (`@vom`) with `@eN` refs, layers and hover probes — **the default read for shadow DOM and iframes** |
|
|
35
|
+
| `session.snapshot({ maxDepth, maxTokens })` | the daemon's plain accessibility tree |
|
|
36
|
+
| `session.getHtml({ ref, maxBytes })` | exact markup |
|
|
37
|
+
| `session.screenshot({ ref })` / `screenshot({ fullPage: true })` | `{ buffer, width, height, captureId }`; full-page captures stream back in chunks |
|
|
38
|
+
| `session.evaluate(expression, { awaitPromise, timeoutMs })` | `{ ok, value, error }` — **check `.ok`**; a resolved promise does not mean the script succeeded |
|
|
39
|
+
| `session.console({ since })` / `session.network({ since })` | buffered console entries / request metadata (no bodies) |
|
|
40
|
+
|
|
41
|
+
**Refs are reissued by every read.** Read a ref and act on it in the same cycle. A ref captured
|
|
42
|
+
two calls ago silently addresses a different element — this is how a click lands on the
|
|
43
|
+
neighbouring row.
|
|
44
|
+
|
|
45
|
+
## Acting
|
|
46
|
+
|
|
47
|
+
| Need | Call |
|
|
48
|
+
|---|---|
|
|
49
|
+
| Click | `session.click(target, { button, clickCount, modifiers })` |
|
|
50
|
+
| Fill | `session.fill(target, value, { clearBefore })` |
|
|
51
|
+
| Select | `session.select(target, ["<option value>"])` |
|
|
52
|
+
| Key | `session.press("Enter", { target, modifiers, holdMs })` |
|
|
53
|
+
| Hover | `session.hover(target, { settleMs })` |
|
|
54
|
+
| Scroll into view | `session.scrollTo(target)` |
|
|
55
|
+
| Wheel | `session.wheel({ deltaY: 600, target })` |
|
|
56
|
+
| Focus / blur | `session.focus(target)` / `session.blur(target)` |
|
|
57
|
+
| Navigate | `session.navigate(url, { waitUntil: "load" \| "domcontentloaded" \| "networkidle" \| "commit", timeoutMs })`, `back()`, `forward()`, `reload({ hard })`, `waitForNavigation()` |
|
|
58
|
+
| Window | `session.resize(width, height)`, `session.emulate({ overrides: { width, mobile } })` |
|
|
59
|
+
|
|
60
|
+
Traps:
|
|
61
|
+
|
|
62
|
+
- `select` takes the option's **value attribute**, not its visible label.
|
|
63
|
+
- `press` without `target` goes to the focused node; `press` with a CSS selector is fine, but a
|
|
64
|
+
daemon ref must come from the current read.
|
|
65
|
+
- A menu that a `click` opens can be toggled shut by that same click. `focus` then `press("Enter")`
|
|
66
|
+
opens it reliably.
|
|
67
|
+
- Hover-only controls report `element not visible`: hover the trigger, read again, then act on the
|
|
68
|
+
revealed item's fresh ref. `observe({ probeHover: true })` finds one when no marker does, at the
|
|
69
|
+
cost of touching the live page.
|
|
70
|
+
- The clipboard is unavailable in a window started `focused: false`, so read values out of the DOM.
|
|
71
|
+
|
|
72
|
+
## Tabs
|
|
73
|
+
|
|
74
|
+
```js
|
|
75
|
+
const { tabs } = await session.tabList({ scope: "user" }) // "user" | "agent" | "all"
|
|
76
|
+
await session.tabBorrow(tabId) // the user confirms in the browser (60 s)
|
|
77
|
+
await session.tabReturn(tabId) // stop() returns anything still borrowed
|
|
78
|
+
await session.tabCreate({ url }); await session.tabSelect(id); await session.tabClose(id)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Never invent tab ids and never repeat a denied borrow.
|
|
82
|
+
|
|
83
|
+
## Humans
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
const { outcome } = await session.requestHelp({ prompt, title, targets: ["@e4"], completionCriteria, timeoutMs })
|
|
87
|
+
// outcome: "completed" | "continued" | "cancelled" | "timed_out" | "navigated" | "disabled"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Errors
|
|
91
|
+
|
|
92
|
+
Every refusal is a `BskRpcError` with the daemon's own `code`:
|
|
93
|
+
|
|
94
|
+
| `code` | Meaning | Do |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| `no_browser_connected` | no extension attached | run the onboarding script, relay the human step, wait |
|
|
97
|
+
| `not_found` | stale ref or unknown session | read again; if the session is gone, start a new one |
|
|
98
|
+
| `invalid_params` | wrong option shape | fix the call, do not retry as-is |
|
|
99
|
+
| `permission_denied` | `evaluate` on a tab outside the Agent Window, or a denied borrow | stop; the user said no |
|
|
100
|
+
| `timeout` | the tool did not finish in its budget | read the page state before retrying once |
|
|
101
|
+
| `user_aborted` | the user pressed Stop in the browser | stop the task and report |
|
|
102
|
+
| `cdp_failed` | the page cannot be attached (restricted URL, DevTools open) | say which page and why |
|
|
103
|
+
|
|
104
|
+
Long calls can be cancelled: `const h = session.client.callWithHandle("tool.navigate", {...})`
|
|
105
|
+
then `await session.client.cancel(h.rpcId)`.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Installing the attached engine
|
|
2
|
+
|
|
3
|
+
Three pieces. The onboarding script prepares all three; a human finishes exactly one.
|
|
4
|
+
|
|
5
|
+
| Piece | Channel | Automatable |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `bsk` CLI + daemon | upstream installer, GitHub Releases | **yes** |
|
|
8
|
+
| Browser extension | registered from the Web Store listing through Chrome's external-extension mechanism | **yes, up to one click** — the browser asks the user to enable it |
|
|
9
|
+
| Daemon process | auto-starts on the first call | nothing to do |
|
|
10
|
+
|
|
11
|
+
## Supported
|
|
12
|
+
|
|
13
|
+
| | |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Operating systems | macOS (Apple Silicon and Intel), Linux (x64, ARM64), Windows x64 |
|
|
16
|
+
| Browsers | Chrome, Microsoft Edge, Brave, Chromium, Arc, Dia, Vivaldi, Opera, Comet, Naver Whale — whichever the doctor lists under `candidates` |
|
|
17
|
+
|
|
18
|
+
## Which browser
|
|
19
|
+
|
|
20
|
+
The extension goes into exactly one browser: the one the user works in. Installed is not the same as
|
|
21
|
+
used — a Chrome launched once keeps its profile directory forever — so the scripts rank candidates by:
|
|
22
|
+
|
|
23
|
+
| Signal | Where it comes from |
|
|
24
|
+
|---|---|
|
|
25
|
+
| Default browser | macOS LaunchServices `https` handler, Linux `xdg-settings`, Windows `UserChoice` ProgId |
|
|
26
|
+
| Running now | the app in `/Applications` (macOS), the process table elsewhere |
|
|
27
|
+
| Used in the last 7 days | the profile's `Local State` / `History` modification time |
|
|
28
|
+
|
|
29
|
+
Order of authority:
|
|
30
|
+
|
|
31
|
+
1. **Your memory.** If you recorded the user's browser before, pass it: `--browser=<id>`.
|
|
32
|
+
2. **`--browser=<id>` / `OMOWRIGHT_BROWSER`** set by the user.
|
|
33
|
+
3. **The default browser, when it is also in use** (or nothing else is).
|
|
34
|
+
4. **The only browser in use** when no default can be read.
|
|
35
|
+
|
|
36
|
+
Anything else is `choose-browser` (doctor) / `needsChoice: true` (install): nothing is registered and
|
|
37
|
+
`candidates` lists every browser with its signals. Ask the user which one they use, run the install
|
|
38
|
+
with `--browser=<id>`, and save the answer to memory so the next session does not ask again. When
|
|
39
|
+
the default browser is Safari or Firefox, BrowserSkill cannot drive it — say so and ask which
|
|
40
|
+
Chromium-family browser to use.
|
|
41
|
+
|
|
42
|
+
The doctor also lists `registeredElsewhere`: browsers that still carry an entry from an older
|
|
43
|
+
onboarding. They are not removed automatically (removing the entry uninstalls an extension the user
|
|
44
|
+
may have enabled); remove one only when the user asks, with omowright's `unregisterExternalExtension`.
|
|
45
|
+
|
|
46
|
+
## One command
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
node "<skill-root>/scripts/browser-install.mjs" [--browser=<id>] [--json] [--wait-ms=180000]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
In order it: runs upstream's official `install.sh` / `install.ps1` into `~/.local/bin` (any PATH
|
|
53
|
+
line the installer appends to a shell rc file is reverted — the library calls the binary by
|
|
54
|
+
absolute path); starts the daemon with `bsk status`; and, for **the one browser the user actually
|
|
55
|
+
uses**, registers the Web Store listing as an external extension:
|
|
56
|
+
|
|
57
|
+
| Platform | Where the entry goes | The user's one step |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| macOS | `<user data dir>/External Extensions/<id>.json` | quit the browser completely, open it again, click **Enable** in the dialog |
|
|
60
|
+
| Windows | `HKCU\Software\<vendor>\<browser>\Extensions\<id>` (`reg add`, no admin) | click **Enable** on the toolbar badge; no restart |
|
|
61
|
+
| Linux (Chromium) | `<user data dir>/External Extensions/<id>.json` | relaunch; installs without a prompt |
|
|
62
|
+
| Linux (Chrome / Edge / Brave) | `/opt/google/chrome/extensions/<id>.json` and siblings — root only | otherwise open the store link it prints and click **Add** |
|
|
63
|
+
| Opera, and Vivaldi / Whale off macOS | no external-extension path | open the store link it prints in that browser and click **Add** |
|
|
64
|
+
|
|
65
|
+
The script prints that step as `humanStep`. **Relay it verbatim and wait**; with `--wait-ms` it
|
|
66
|
+
keeps polling the daemon until the extension connects. An empty `browsersConnected` afterwards is
|
|
67
|
+
not a failure to work around — the browser is closed or the user has not clicked yet; say which
|
|
68
|
+
and ask.
|
|
69
|
+
|
|
70
|
+
If the user removed the extension from the browser before, Chrome blocklists its id for external
|
|
71
|
+
installs. The script detects that (`reason: "blocklisted"`) and prints the store link instead:
|
|
72
|
+
|
|
73
|
+
- Chrome: https://chromewebstore.google.com/detail/hhcmgoofomhgciiibhipgmgkgnoenaoi
|
|
74
|
+
- Edge: https://microsoftedge.microsoft.com/addons/detail/browserskill/emacgiaaaiojkkpkddmmdfhmokgmnikg
|
|
75
|
+
|
|
76
|
+
Enterprise force-install policies are deliberately not used: they brand the browser "managed by
|
|
77
|
+
your organization" and the user cannot remove the extension.
|
|
78
|
+
|
|
79
|
+
## Do not install upstream's skill
|
|
80
|
+
|
|
81
|
+
Upstream ships its own agent skill through `bsk install-skill`. **Do not run it here.** This
|
|
82
|
+
package already provides the skill, and upstream's copy installs under a different name into the
|
|
83
|
+
user skill directory, which takes precedence over a shipped skill — two descriptions of the same
|
|
84
|
+
engine, one of them shadowing the one that knows about omowright and this package's scripts.
|
|
85
|
+
|
|
86
|
+
## Diagnosing
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
node "<skill-root>/scripts/browser-doctor.mjs" --json # this package's view: cli, daemon, the user's browser + candidates, registrations, connections
|
|
90
|
+
bsk doctor # upstream's own checks
|
|
91
|
+
bsk logs # daemon log
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The daemon exits about ten minutes after the last browser disconnects and is not a system
|
|
95
|
+
service, so a reboot also stops it. Both heal on the next call — `connectBrowserSkill()` starts it
|
|
96
|
+
unless `BSK_AUTO_START=0` (sandboxes that reap background processes keep the daemon on the host
|
|
97
|
+
and share `BSK_HOME`; see upstream's sandboxed-agents guide).
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# The owned engine
|
|
2
|
+
|
|
3
|
+
A browser **your code launches and owns**, driven over CDP by omowright with its own profile. The
|
|
4
|
+
opposite of the attached engine: no user logins, full control.
|
|
5
|
+
|
|
6
|
+
```js
|
|
7
|
+
const { omowright } = await loadOmowright()
|
|
8
|
+
const profile = mkdtempSync(join(tmpdir(), "omowright-"))
|
|
9
|
+
const browser = await omowright.connectPipe({
|
|
10
|
+
browserPath: "<CloakBrowser or chrome-headless-shell binary>",
|
|
11
|
+
browserArgs: ["--headless", "--no-first-run", `--user-data-dir=${profile}`],
|
|
12
|
+
storageRoot: profile,
|
|
13
|
+
dialogPolicy: { accept: true },
|
|
14
|
+
})
|
|
15
|
+
try {
|
|
16
|
+
const page = await browser.newTab("https://example.com/")
|
|
17
|
+
const tree = omowright.compactSnapshot(await page.snapshot()) // ALWAYS compact before a model reads it
|
|
18
|
+
await page.locator("e3").click() // refs come straight from the snapshot
|
|
19
|
+
await Bun.write("shot.png", await page.screenshot())
|
|
20
|
+
} finally {
|
|
21
|
+
await browser.close()
|
|
22
|
+
rmSync(profile, { recursive: true, force: true }) // paired: a leftover profile is a logged-in browser nobody watches
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`connectPipe` launches over `--remote-debugging-pipe`: no listening port, stdio drained, the
|
|
27
|
+
process reaped on `close()`. `connect("http://127.0.0.1:<port>")` attaches to a browser something
|
|
28
|
+
else launched. `connectCloakProfile({ profileDir })` launches CloakBrowser with a pinned
|
|
29
|
+
fingerprint seed — the stealth path for WAF and bot-scored targets, where the attached engine's
|
|
30
|
+
console capture would be a signal.
|
|
31
|
+
|
|
32
|
+
## When it is the right engine
|
|
33
|
+
|
|
34
|
+
| Reason | Why the attached engine cannot |
|
|
35
|
+
|---|---|
|
|
36
|
+
| A throwaway or pinned synthetic profile | the attached engine is the user's real profile |
|
|
37
|
+
| Bot-scoring or fingerprint evasion | you do not get to configure the user's browser |
|
|
38
|
+
| Solving a challenge widget programmatically | needs coordinate control and OCR |
|
|
39
|
+
| Reading the network instead of the DOM | needs request interception on your own target |
|
|
40
|
+
| A QA flight trace (steps, HAR, screenshots) | recording someone's real session is not acceptable |
|
|
41
|
+
| Headless or unattended runs | the user's browser is on their desk |
|
|
42
|
+
|
|
43
|
+
For anything that needs the user's login, the attached engine wins. For extracting text from a
|
|
44
|
+
blocked URL, neither: use the `ultimate-browsing` skill.
|
|
45
|
+
|
|
46
|
+
## The page
|
|
47
|
+
|
|
48
|
+
`OmOPage` is Playwright-shaped: `goto`, `snapshot`, `locator(ref | css)`, `click`, `fill`,
|
|
49
|
+
`press`, `hover`, `check`, `selectOption`, `dragTo`, `setInputFiles`, `screenshot`, `pdf`,
|
|
50
|
+
`evaluate`, `waitForURL`, `keyboard`, `mouse`, `frameLocator`. A snapshot is an accessibility tree
|
|
51
|
+
with virtual refs (`[ref=e3]`, cross-origin frames as `f1e3`); `compactSnapshot()` drops the refs
|
|
52
|
+
map, about half the bytes. Readiness is a content probe (body plus interactive elements, landmarks
|
|
53
|
+
or text), not a timer; `goto(url, { waitUntil: "commit" })` is the escape hatch for empty pages.
|
|
54
|
+
|
|
55
|
+
## Reference
|
|
56
|
+
|
|
57
|
+
- [ladder.md](ladder.md) — the escalation ladder, viewport pinning, `createCua`, `createCaptcha`
|
|
58
|
+
- [network.md](network.md) — `createNetworkSnoop`, `collectWhileScrolling`, `createTrace`, `createRoutes`
|
|
59
|
+
- [frames-and-humans.md](frames-and-humans.md) — `snapshotWithFrames`, `describeLayers`, dialog policy, `emulate`, `requestHuman`
|
|
60
|
+
|
|
61
|
+
The library's own skill (`skills/omowright/SKILL.md` and `presets/*` in the omowright repository)
|
|
62
|
+
is the authoritative, longer treatment of each; these pages are the routing summary.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Frames, overlays, dialogs, and the human
|
|
2
|
+
|
|
3
|
+
## Cross-origin frames and shadow DOM
|
|
4
|
+
|
|
5
|
+
A cross-origin iframe is a separate target with its own snapshot. `snapshotWithFrames(page)`
|
|
6
|
+
reconciles the child trees into the parent so one tree describes the whole page, and reports
|
|
7
|
+
`missingFrames` for any it could not enter; address child elements through the page-level ref
|
|
8
|
+
(`f1e3`) — never by fetching a frame handle first. Shadow roots are traversed by the snapshot
|
|
9
|
+
engine; they are not a special case for you.
|
|
10
|
+
|
|
11
|
+
## Overlays that swallow clicks
|
|
12
|
+
|
|
13
|
+
Two identical misses on an element that is clearly visible usually means something invisible sits
|
|
14
|
+
on top: a consent banner, a modal backdrop, a sticky header, a full-viewport tracking layer.
|
|
15
|
+
`describeLayers(page)` names the topmost fixed or sticky element covering the viewport, and
|
|
16
|
+
`snapshotWithLayers(page)` prefixes a snapshot with `@layers blocking=<role> "<name>"` when one
|
|
17
|
+
exists. Either the overlay is named — dismiss it and continue — or `@layers none`, which means the
|
|
18
|
+
miss has another cause and you climb the ladder instead.
|
|
19
|
+
|
|
20
|
+
## Dialogs never block
|
|
21
|
+
|
|
22
|
+
`alert`, `confirm`, `prompt`, and `beforeunload` are answered by the `dialogPolicy` passed to
|
|
23
|
+
`connectPipe` (or `browser.setDialogPolicy`), at the protocol layer, before the page sees them.
|
|
24
|
+
Default to accepting (`{ accept: true }`; a function receives `{ type, message }` and returns
|
|
25
|
+
`{ accept, promptText }`). `page.on("dialog")` still fires for observability. A run that hangs on
|
|
26
|
+
an unhandled dialog looks exactly like a hang with no cause, which is the most expensive kind to
|
|
27
|
+
diagnose.
|
|
28
|
+
|
|
29
|
+
## Device emulation
|
|
30
|
+
|
|
31
|
+
`emulate(page, "iphone-14")` applies viewport, device scale factor, user agent and touch together;
|
|
32
|
+
changing only the viewport produces a desktop page at a phone size, which is not what you are
|
|
33
|
+
testing. `emulate(page, null)` restores. Re-read the viewport after emulating, and re-pin
|
|
34
|
+
coordinates.
|
|
35
|
+
|
|
36
|
+
## Handing the page to a human
|
|
37
|
+
|
|
38
|
+
When every rung fails on a login, a one-time code, or a challenge you cannot clear, the human is
|
|
39
|
+
the fallback, not the failure:
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
const { outcome } = await omowright.requestHuman(page, {
|
|
43
|
+
prompt: "Please finish the sign-in in this window.",
|
|
44
|
+
until: { url: /\/dashboard/ }, // or { selector } or async (page) => boolean
|
|
45
|
+
timeoutMs: 300_000,
|
|
46
|
+
})
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
It brings the window to the front, shows a banner with a Done button, and waits on a
|
|
50
|
+
**condition** with a bounded timeout rather than a fixed delay. Respect the answer: `timed_out`
|
|
51
|
+
or `cancelled` is a stop, and the correct response is to report which rung failed with what
|
|
52
|
+
evidence. Working around the user's refusal is never correct.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# The escalation ladder
|
|
2
|
+
|
|
3
|
+
**Two identical failures on the same target mean climb, not retry. A third identical attempt is a
|
|
4
|
+
defect.** The failure itself selects the next rung; never pause to ask which.
|
|
5
|
+
|
|
6
|
+
| Rung | Use | Climb when |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| 1. `page.snapshot()` + `page.locator(ref)` | anything with a usable ref | the ref is absent, stale, obscured, or the click lands on the wrong node twice |
|
|
9
|
+
| 1b. `snapshotWithLayers(page)` / `describeLayers(page)` | a blocking overlay explains two identical misses | `@layers none`, or the overlay is gone and the click still misses |
|
|
10
|
+
| 2. `createCua(page)` coordinates | canvas, extension popups, custom controls, drag surfaces | the click misses, or the screenshot and the coordinates disagree |
|
|
11
|
+
| 3. pin the viewport (`emulate(page, "desktop-1440")` / `repinViewport`), redo rung 2 | coordinate drift after a resize, a DPI change, or a foreign tab | coordinates land correctly but the widget still refuses input |
|
|
12
|
+
| 4. `createCaptcha(page)` | a challenge is the blocker | it clears and the flow still stalls |
|
|
13
|
+
| 5. read the browser log (`browser.close()` surfaces the stdio tail) | a browser-level failure | the log names a cause outside the page |
|
|
14
|
+
|
|
15
|
+
**Rung 5 ends in a written diagnosis, never a speculative code change.** A missing entitlement, a
|
|
16
|
+
dead extension service worker, an unavailable authenticator — none of those is fixed by editing
|
|
17
|
+
automation code.
|
|
18
|
+
|
|
19
|
+
## Pin the viewport before trusting any coordinate
|
|
20
|
+
|
|
21
|
+
`createCua(page)` acts in viewport pixels. When the render surface and the coordinate space
|
|
22
|
+
disagree, every coordinate is off by the same constant and retrying just repeats the miss. Set the
|
|
23
|
+
device metrics explicitly (`emulate` applies width, height, `deviceScaleFactor` and touch
|
|
24
|
+
together), re-read the page's viewport size, then take a **fresh** `cua.getVisibleScreenshot()`.
|
|
25
|
+
Coordinates read off an unpinned screenshot are stale. Pin every page you act on, including tabs
|
|
26
|
+
you did not open (`createAgentTabs` re-pins on create).
|
|
27
|
+
|
|
28
|
+
## Refs
|
|
29
|
+
|
|
30
|
+
- Refs die on every new snapshot. Pass a ref straight from the latest snapshot; never reuse one
|
|
31
|
+
across snapshots and never put one in a CSS selector.
|
|
32
|
+
- Refs stay page-level. A child-frame ref (`f1e3`) still resolves through `page.locator`, so you
|
|
33
|
+
never fetch a frame handle to click inside an iframe.
|
|
34
|
+
- Always `compactSnapshot()` before sending a snapshot to a model.
|
|
35
|
+
|
|
36
|
+
## Challenge widgets
|
|
37
|
+
|
|
38
|
+
A challenge is an obstacle on the path, not a stop sign: clear it, confirm it cleared, continue.
|
|
39
|
+
`createCaptcha(page)` gives three techniques:
|
|
40
|
+
|
|
41
|
+
- **Checkbox** (the common embedded widgets): the control lives in a nested frame, so
|
|
42
|
+
`captcha.click(bounds)` addresses it by viewport coordinates.
|
|
43
|
+
- **Slider / puzzle**: `captcha.drag(from, to, { steps })` with enough intermediate steps that the
|
|
44
|
+
motion reads as human. Raise the step count before you change the endpoints.
|
|
45
|
+
- **Text or number**: `captcha.readText(bounds)` OCRs the region — the macOS Vision framework by
|
|
46
|
+
default, or pass your own `ocr` function or a vision model.
|
|
47
|
+
- **Image grid**: annotate a screenshot, then click per cell with `createCua`.
|
|
48
|
+
|
|
49
|
+
**Bounds measured against an unpinned viewport are wrong by a constant offset.** If clicks have
|
|
50
|
+
been landing wrong, drop to rung 3 first, then re-read the bounds.
|
|
51
|
+
|
|
52
|
+
Verify with a fresh snapshot that the challenge is gone. Verification is part of the action, not a
|
|
53
|
+
separate optimistic assumption. When every technique fails on a page a real browser passes, the
|
|
54
|
+
engine is the variable: relaunch through `connectCloakProfile()`.
|
|
55
|
+
|
|
56
|
+
## Delegating the pixel loop
|
|
57
|
+
|
|
58
|
+
Coordinate work and challenge solving are iterative: screenshot, reason, act, verify. When that
|
|
59
|
+
loop would consume your own context, delegate the blocked page to a subagent armed with these
|
|
60
|
+
references and have it return the post-solve state. Drive it yourself when the flow is short or
|
|
61
|
+
the state is already in your hands.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Read the network, not the DOM
|
|
2
|
+
|
|
3
|
+
When a page renders a list, a table, or search results, the data almost always arrived as JSON one
|
|
4
|
+
request earlier. That JSON is complete, typed, free of markup, and immune to the layout changing
|
|
5
|
+
next week. Watching traffic costs nothing on a target you own, and the page cannot observe it.
|
|
6
|
+
|
|
7
|
+
**Snoop before you scrape.** Scroll-and-parse is the fallback, not the default.
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
const snoop = omowright.createNetworkSnoop(page, { maxBodyBytes: 512 * 1024 })
|
|
11
|
+
await page.goto(url)
|
|
12
|
+
const hit = await snoop.waitFor({ url: /\/api\/search/, mimeType: "application/json" }, { timeoutMs: 10_000 })
|
|
13
|
+
const rows = snoop.popJson() // every buffered JSON body, drained
|
|
14
|
+
console.log(snoop.summary({ max: 20 })) // one line per request: method status mime size url
|
|
15
|
+
snoop.dispose()
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Wait for a request, never for a clock
|
|
19
|
+
|
|
20
|
+
A fixed sleep is a guess that fails on a slower machine and wastes time on a faster one.
|
|
21
|
+
`snoop.waitFor(match)` subscribes to the response you expect **before** you trigger the action,
|
|
22
|
+
then awaits it with a bounded timeout. This is the same rule that governs test code, for the same
|
|
23
|
+
reason.
|
|
24
|
+
|
|
25
|
+
## Collecting through infinite scroll
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
for await (const batch of omowright.collectWhileScrolling(page, snoop, { minItems: 200, maxScrolls: 10, extract: (json) => json.items })) {
|
|
29
|
+
items.push(...batch)
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Scroll, collect what is new, stop on a target count or a scroll ceiling. Bound both, so a page
|
|
34
|
+
that keeps producing cannot run forever.
|
|
35
|
+
|
|
36
|
+
## Flight traces
|
|
37
|
+
|
|
38
|
+
For QA evidence, `createTrace(page, { dir })` records one entry per `trace.step(name, fn)` with
|
|
39
|
+
before/after screenshots, the network log and console output, written as `trace.jsonl` plus
|
|
40
|
+
`trace.har` (`toHar` builds the HAR from snoop entries). That triple is what makes a failure
|
|
41
|
+
reconstructable afterwards instead of re-runnable-in-theory. Call `trace.stop()` in `finally`.
|
|
42
|
+
|
|
43
|
+
Cap recorded body sizes. An untrimmed trace of a media-heavy page is mostly bytes nobody reads.
|
|
44
|
+
|
|
45
|
+
## Request interception
|
|
46
|
+
|
|
47
|
+
`createRoutes(page)` matches by glob, regular expression, or predicate and lets a handler
|
|
48
|
+
`continue`, `fulfill({ status, body })` or `abort()`: stub an endpoint, fail one request to test an
|
|
49
|
+
error path, block third-party noise. Interception is enabled on the first route and disabled on
|
|
50
|
+
`dispose()` — leaving it on slows every later navigation and changes the timing fingerprint, so
|
|
51
|
+
prefer passive snooping on bot-scored targets.
|
|
52
|
+
|
|
53
|
+
## Cookies
|
|
54
|
+
|
|
55
|
+
`injectCookies(page, cookies)` sanitizes what it injects (drops expired entries, keeps
|
|
56
|
+
host-prefixed cookies secure and root-scoped). Injecting an export into your own profile is
|
|
57
|
+
legitimate for ordinary sessions and useless for the ones you most want: accounts whose risk
|
|
58
|
+
engines bind a session to a device will invalidate it, and a password manager's session is
|
|
59
|
+
tab-bound and never portable.
|
|
60
|
+
|
|
61
|
+
**Never copy a session out of the user's real browser profile.** If you need their login, that is
|
|
62
|
+
the attached engine's job.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Reading a 1Password vault the user has unlocked
|
|
2
|
+
|
|
3
|
+
Scope: reading an item out of a vault **the user has already unlocked in their browser**. Signing
|
|
4
|
+
in is the user's job; see "Not in scope" below.
|
|
5
|
+
|
|
6
|
+
## The fact that shapes everything
|
|
7
|
+
|
|
8
|
+
1Password web is zero-knowledge. The unlocked vault key lives in **one tab's `sessionStorage`**,
|
|
9
|
+
not in a cookie. So:
|
|
10
|
+
|
|
11
|
+
- A **new** tab pointed at the vault redirects to the sign-in page even while a signed-in tab sits
|
|
12
|
+
right beside it. Opening your own tab does not work and never will.
|
|
13
|
+
- Navigating the authenticated tab away, or closing it, **destroys the session** until a human
|
|
14
|
+
signs in again.
|
|
15
|
+
|
|
16
|
+
Therefore: borrow the existing tab, read, return it. Do not open, do not navigate away, do not
|
|
17
|
+
"refresh to fix" anything.
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
const { tabs } = await session.tabList({ scope: "user" }) // find the already-signed-in tab by URL
|
|
21
|
+
const vault = tabs.find((t) => /my\.1password\.com\/(?:vaults|app)/.test(t.url))
|
|
22
|
+
await session.tabBorrow(vault.tab_id) // the user confirms
|
|
23
|
+
// ... read ...
|
|
24
|
+
await session.tabReturn(vault.tab_id)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Check liveness by URL, never by title
|
|
28
|
+
|
|
29
|
+
The app mutates its URL hash without updating the document title, so a signed-in vault can still
|
|
30
|
+
report a sign-in title. A live session's `location.href` contains the app path and never the
|
|
31
|
+
sign-in path. Read the URL from `tabList`, or `session.evaluate("location.href")`.
|
|
32
|
+
|
|
33
|
+
## The browser may be shared
|
|
34
|
+
|
|
35
|
+
Other automation may be driving the same window.
|
|
36
|
+
|
|
37
|
+
- **Clear the search box before typing** (`fill(target, value, { clearBefore: true })`). It often
|
|
38
|
+
holds someone else's query, and typing alone appends to it, returning confident results for the
|
|
39
|
+
wrong search.
|
|
40
|
+
- **Read the autocomplete listbox, not the results grid.** The grid holds whatever query was last
|
|
41
|
+
committed, possibly by another actor. Scraping every option on the page silently merges two
|
|
42
|
+
different searches.
|
|
43
|
+
- **Leave the tab on the item list** when you are done, so the next actor starts clean.
|
|
44
|
+
|
|
45
|
+
## If it is locked
|
|
46
|
+
|
|
47
|
+
```js
|
|
48
|
+
await session.requestHelp({ prompt: "Please unlock 1Password in this tab, then continue." })
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Then read the page again.
|
|
52
|
+
|
|
53
|
+
## Not in scope
|
|
54
|
+
|
|
55
|
+
- **Do not type a master password, and do not automate the sign-in form.** Only the account owner
|
|
56
|
+
signs in. If the vault is locked, hand it to them.
|
|
57
|
+
- **Do not extract secrets through the page** beyond the single value the user asked for, and
|
|
58
|
+
report it masked (`abcd…9fb0 (len 37)`) unless they asked for the exact string.
|
|
59
|
+
- **Do not copy, inject, or reuse session cookies.** The session is device- and tab-bound; cookie
|
|
60
|
+
reuse cannot work and trips account protections.
|
|
61
|
+
- Clear the clipboard if you ever populate it.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Agent here, browser there
|
|
2
|
+
|
|
3
|
+
The agent and the browser do not have to be the same machine. Upstream supports this directly;
|
|
4
|
+
nothing in this package needs to bridge it.
|
|
5
|
+
|
|
6
|
+
Shape:
|
|
7
|
+
|
|
8
|
+
- The **browser machine** needs only the extension.
|
|
9
|
+
- The **agent machine** runs the `bsk` daemon, omowright and this skill.
|
|
10
|
+
- They are joined by a daemon in server mode plus a pairing link.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
bsk daemon start --mode server # on the machine the agent runs on; WSS is required off loopback
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Then follow upstream's pairing guide, which owns the current flag surface and the TLS
|
|
17
|
+
prerequisites: https://github.com/Tencent/BrowserSkill/blob/main/docs/remote-extension-connection.md
|
|
18
|
+
|
|
19
|
+
Once paired, `connectBrowserSkill()` and every session method behave identically; screenshot
|
|
20
|
+
buffers arrive on the machine that ran the call. Windows named pipes are not discovered
|
|
21
|
+
automatically — pass `sockPath` to `connectBrowserSkill()`.
|
|
22
|
+
|
|
23
|
+
If pairing is not configured, say so and ask. Do not substitute a browser on the agent machine:
|
|
24
|
+
the point of the attached engine is the sessions that live in the user's browser, and a local
|
|
25
|
+
browser has none of them.
|