oh-my-opencode 5.0.0-beta.8 → 5.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/command/publish.md +44 -16
- package/.agents/skills/publish/SKILL.md +44 -16
- package/.opencode/command/publish.md +44 -16
- package/dist/agents/atlas/agent.d.ts +0 -1
- package/dist/cli/index.js +34 -31
- package/dist/cli/run/on-complete-hook.d.ts +2 -0
- package/dist/cli-node/index.js +34 -31
- package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
- package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
- package/dist/index.js +25 -24
- package/dist/shared/shell-env.d.ts +1 -1
- package/dist/skills/ultimate-browsing/ATTRIBUTION.md +35 -8
- package/dist/skills/ultimate-browsing/engine/AGENTS.md +110 -0
- package/dist/tui.js +2 -2
- package/package.json +15 -14
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +2 -2
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +2 -2
- package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +3 -17
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +16 -23
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
- package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
- package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +37 -69
- package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +1 -15
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +0 -3
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +2 -16
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +3 -9
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
- package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +2 -35
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +4 -5
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +20 -20
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +35 -8
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +110 -0
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +4 -24
- package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
- package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
- package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
- package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
- package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -119
- package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
- package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
- package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
- package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
- package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
- package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +0 -3
- package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
- package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +35 -8
- package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +110 -0
- package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
- package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
- package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
package/dist/cli-node/index.js
CHANGED
|
@@ -1020,7 +1020,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1020
1020
|
this._exitCallback = (err) => {
|
|
1021
1021
|
if (err.code !== "commander.executeSubCommandAsync") {
|
|
1022
1022
|
throw err;
|
|
1023
|
-
}
|
|
1023
|
+
}
|
|
1024
1024
|
};
|
|
1025
1025
|
}
|
|
1026
1026
|
return this;
|
|
@@ -2146,7 +2146,7 @@ var package_default;
|
|
|
2146
2146
|
var init_package = __esm(() => {
|
|
2147
2147
|
package_default = {
|
|
2148
2148
|
name: "oh-my-opencode",
|
|
2149
|
-
version: "5.0.0-beta.
|
|
2149
|
+
version: "5.0.0-beta.9",
|
|
2150
2150
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
2151
2151
|
main: "./dist/index.js",
|
|
2152
2152
|
types: "dist/index.d.ts",
|
|
@@ -2282,6 +2282,7 @@ var init_package = __esm(() => {
|
|
|
2282
2282
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
2283
2283
|
test: "bun test",
|
|
2284
2284
|
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
2285
|
+
"test:fast": "bun run script/test-fast.ts",
|
|
2285
2286
|
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi",
|
|
2286
2287
|
"test:windows-codex": "bun run test:codex",
|
|
2287
2288
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
@@ -2326,7 +2327,7 @@ var init_package = __esm(() => {
|
|
|
2326
2327
|
zod: "^4.4.3"
|
|
2327
2328
|
},
|
|
2328
2329
|
devDependencies: {
|
|
2329
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
2330
|
+
"@code-yeongyu/senpi": "2026.8.17",
|
|
2330
2331
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
2331
2332
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
2332
2333
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -2367,18 +2368,18 @@ var init_package = __esm(() => {
|
|
|
2367
2368
|
typescript: "^7.0.2"
|
|
2368
2369
|
},
|
|
2369
2370
|
optionalDependencies: {
|
|
2370
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
2371
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
2372
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
2373
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
2374
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
2375
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
2376
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
2377
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
2378
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
2379
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
2380
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
2381
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
2371
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.9",
|
|
2372
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.9",
|
|
2373
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.9",
|
|
2374
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.9",
|
|
2375
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.9",
|
|
2376
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.9",
|
|
2377
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.9",
|
|
2378
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.9",
|
|
2379
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.9",
|
|
2380
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.9",
|
|
2381
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.9",
|
|
2382
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.9"
|
|
2382
2383
|
},
|
|
2383
2384
|
overrides: {
|
|
2384
2385
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -18763,7 +18764,7 @@ function finalize(ctx, schema) {
|
|
|
18763
18764
|
result.$schema = "http://json-schema.org/draft-07/schema#";
|
|
18764
18765
|
} else if (ctx.target === "draft-04") {
|
|
18765
18766
|
result.$schema = "http://json-schema.org/draft-04/schema#";
|
|
18766
|
-
} else if (ctx.target === "openapi-3.0") {}
|
|
18767
|
+
} else if (ctx.target === "openapi-3.0") {}
|
|
18767
18768
|
if (ctx.external?.uri) {
|
|
18768
18769
|
const id = ctx.external.registry.get(schema)?.id;
|
|
18769
18770
|
if (!id)
|
|
@@ -19024,7 +19025,7 @@ var formatMap, stringProcessor = (schema, ctx, _json, _params) => {
|
|
|
19024
19025
|
if (val === undefined) {
|
|
19025
19026
|
if (ctx.unrepresentable === "throw") {
|
|
19026
19027
|
throw new Error("Literal `undefined` cannot be represented in JSON Schema");
|
|
19027
|
-
}
|
|
19028
|
+
}
|
|
19028
19029
|
} else if (typeof val === "bigint") {
|
|
19029
19030
|
if (ctx.unrepresentable === "throw") {
|
|
19030
19031
|
throw new Error("BigInt literals cannot be represented in JSON Schema");
|
|
@@ -83263,21 +83264,21 @@ var init_session_cursor = __esm(() => {
|
|
|
83263
83264
|
});
|
|
83264
83265
|
|
|
83265
83266
|
// packages/omo-opencode/src/shared/shell-env.ts
|
|
83266
|
-
function detectShellType() {
|
|
83267
|
-
if (
|
|
83268
|
-
const shell =
|
|
83267
|
+
function detectShellType(platform = process.platform, env2 = process.env) {
|
|
83268
|
+
if (env2.SHELL) {
|
|
83269
|
+
const shell = env2.SHELL;
|
|
83269
83270
|
if (shell.includes("csh") || shell.includes("tcsh")) {
|
|
83270
83271
|
return "csh";
|
|
83271
83272
|
}
|
|
83272
83273
|
return "unix";
|
|
83273
83274
|
}
|
|
83274
|
-
if (
|
|
83275
|
+
if (platform === "win32" && (env2.BASH_VERSION || env2.MSYSTEM || env2.WSL_DISTRO_NAME)) {
|
|
83275
83276
|
return "unix";
|
|
83276
83277
|
}
|
|
83277
|
-
if (
|
|
83278
|
+
if (env2.PSModulePath) {
|
|
83278
83279
|
return "powershell";
|
|
83279
83280
|
}
|
|
83280
|
-
return
|
|
83281
|
+
return platform === "win32" ? "cmd" : "unix";
|
|
83281
83282
|
}
|
|
83282
83283
|
var init_shell_env = () => {};
|
|
83283
83284
|
|
|
@@ -94685,7 +94686,7 @@ var package_default2;
|
|
|
94685
94686
|
var init_package2 = __esm(() => {
|
|
94686
94687
|
package_default2 = {
|
|
94687
94688
|
name: "@oh-my-opencode/omo-codex",
|
|
94688
|
-
version: "5.0.0-beta.
|
|
94689
|
+
version: "5.0.0-beta.9",
|
|
94689
94690
|
type: "module",
|
|
94690
94691
|
private: true,
|
|
94691
94692
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -106470,7 +106471,7 @@ function createJsonOutputManager(options = {}) {
|
|
|
106470
106471
|
|
|
106471
106472
|
// packages/omo-opencode/src/cli/run/on-complete-hook.ts
|
|
106472
106473
|
init_spawn_with_windows_hide();
|
|
106473
|
-
|
|
106474
|
+
init_shell_env();
|
|
106474
106475
|
init_logger2();
|
|
106475
106476
|
var defaultDeps3 = {
|
|
106476
106477
|
spawnWithWindowsHide,
|
|
@@ -106490,15 +106491,15 @@ async function readOutput(stream, streamName, deps = defaultDeps3) {
|
|
|
106490
106491
|
return "";
|
|
106491
106492
|
}
|
|
106492
106493
|
}
|
|
106493
|
-
function resolveHookShellCommand(command) {
|
|
106494
|
-
const shellType = detectShellType();
|
|
106494
|
+
function resolveHookShellCommand(command, platform, env3) {
|
|
106495
|
+
const shellType = detectShellType(platform, env3);
|
|
106495
106496
|
switch (shellType) {
|
|
106496
106497
|
case "powershell": {
|
|
106497
|
-
const powershellExecutable =
|
|
106498
|
+
const powershellExecutable = platform === "win32" ? "powershell.exe" : "pwsh";
|
|
106498
106499
|
return [powershellExecutable, "-NoProfile", "-Command", command];
|
|
106499
106500
|
}
|
|
106500
106501
|
case "cmd":
|
|
106501
|
-
return [
|
|
106502
|
+
return [env3.ComSpec || "cmd.exe", "/d", "/s", "/c", command];
|
|
106502
106503
|
case "csh":
|
|
106503
106504
|
return ["csh", "-c", command];
|
|
106504
106505
|
case "unix":
|
|
@@ -106514,10 +106515,12 @@ async function executeOnCompleteHook(options, deps = defaultDeps3) {
|
|
|
106514
106515
|
}
|
|
106515
106516
|
deps.log("Running on-complete hook", { command: trimmedCommand });
|
|
106516
106517
|
try {
|
|
106517
|
-
const
|
|
106518
|
+
const platform = deps.platform ?? process.platform;
|
|
106519
|
+
const env3 = deps.env ?? process.env;
|
|
106520
|
+
const shellCommand = resolveHookShellCommand(trimmedCommand, platform, env3);
|
|
106518
106521
|
const proc = deps.spawnWithWindowsHide(shellCommand, {
|
|
106519
106522
|
env: {
|
|
106520
|
-
...
|
|
106523
|
+
...env3,
|
|
106521
106524
|
SESSION_ID: sessionId,
|
|
106522
106525
|
EXIT_CODE: String(exitCode),
|
|
106523
106526
|
DURATION_MS: String(durationMs),
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { mock } from "bun:test";
|
|
2
|
+
import type { createAtlasHook } from "./index";
|
|
3
|
+
import type { createToolExecuteAfterHandler } from "./tool-execute-after";
|
|
4
|
+
import type { SessionState, ToolExecuteAfterOutput } from "./types";
|
|
5
|
+
type AtlasHookContext = Parameters<typeof createAtlasHook>[0];
|
|
6
|
+
type PromptMock = ReturnType<typeof mock>;
|
|
7
|
+
export type FinalWaveMockPluginInput = AtlasHookContext & {
|
|
8
|
+
_promptMock: PromptMock;
|
|
9
|
+
};
|
|
10
|
+
export type FinalWaveAfterHandlerHarness = {
|
|
11
|
+
sessionState: SessionState;
|
|
12
|
+
run: (toolOutput: ToolExecuteAfterOutput) => Promise<void>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Builds a mock plugin input with a recording prompt mock. `resolveParentSessionID`
|
|
16
|
+
* maps a subagent task session id to the orchestrator session the task belongs to.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createFinalWaveMockPluginInput(options: {
|
|
19
|
+
directory: string;
|
|
20
|
+
resolveParentSessionID: (taskSessionID: string) => string;
|
|
21
|
+
}): FinalWaveMockPluginInput;
|
|
22
|
+
/**
|
|
23
|
+
* Registers per-test temp-directory lifecycle hooks (`.omo` scaffold + boulder state
|
|
24
|
+
* cleanup) and exposes the current directory. `resetAgentRegistration` also resets
|
|
25
|
+
* the shared claude-code session-state registry between tests.
|
|
26
|
+
*/
|
|
27
|
+
export declare function registerFinalWaveTestEnvironment(options?: {
|
|
28
|
+
resetAgentRegistration?: boolean;
|
|
29
|
+
}): {
|
|
30
|
+
readonly directory: string;
|
|
31
|
+
};
|
|
32
|
+
/** Writes the plan markdown plus the boulder state pointing the session at it. */
|
|
33
|
+
export declare function writeFinalWavePlanState(options: {
|
|
34
|
+
directory: string;
|
|
35
|
+
sessionID: string;
|
|
36
|
+
planName: string;
|
|
37
|
+
planContent: string;
|
|
38
|
+
}): string;
|
|
39
|
+
/**
|
|
40
|
+
* Wraps `createToolExecuteAfterHandler` with a shared in-memory session-state map so
|
|
41
|
+
* tests can assert pause/count flags. The handler factory is passed in explicitly:
|
|
42
|
+
* suites that mock modules (`mock.module`) must hand over their post-mock import so
|
|
43
|
+
* the harness runs against the same module instance the suite asserts on.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createFinalWaveAfterHandlerHarness(options: {
|
|
46
|
+
ctx: AtlasHookContext;
|
|
47
|
+
sessionID: string;
|
|
48
|
+
createHandler: typeof createToolExecuteAfterHandler;
|
|
49
|
+
}): FinalWaveAfterHandlerHarness;
|
|
50
|
+
export {};
|
|
@@ -2,6 +2,5 @@ export declare const DIRECT_WORK_REMINDER: string;
|
|
|
2
2
|
export declare const BOULDER_CONTINUATION_PROMPT: string;
|
|
3
3
|
export declare const BOULDER_COMPLETE_PROMPT = "<system-reminder>\nBOULDER COMPLETE: plan \"{PLAN_NAME}\" is fully checked.\n\nTotal elapsed: {ELAPSED_HUMAN}\n\nPer-task breakdown:\n{TASK_BREAKDOWN}\n\nPer your <boulder_completion_response> instructions, print the final ORCHESTRATION COMPLETE summary in your next turn. This nudge fires at most once.\n</system-reminder>";
|
|
4
4
|
export declare const VERIFICATION_REMINDER = "**THE SUBAGENT JUST CLAIMED THIS TASK IS DONE. THEY ARE PROBABLY LYING.**\n\nSubagents say \"done\" when code has errors, tests pass trivially, logic is wrong,\nor they quietly added features nobody asked for. This happens EVERY TIME.\nAssume the work is broken until YOU prove otherwise.\n\n---\n\n**PHASE 1: READ THE CODE FIRST (before running anything)**\n\nDo NOT run tests yet. Read the code FIRST so you know what you're testing.\n\n1. `Bash(\"git diff --stat -- ':!node_modules'\")` - see exactly which files changed. Any file outside expected scope = scope creep.\n2. `Read` EVERY changed file - no exceptions, no skimming.\n3. For EACH file, critically ask:\n - Does this code ACTUALLY do what the task required? (Re-read the task, compare line by line)\n - Any stubs, TODOs, placeholders, hardcoded values? (`Grep` for TODO, FIXME, HACK, xxx)\n - Logic errors? Trace the happy path AND the error path in your head.\n - Anti-patterns? (`Grep` for `as any`, `@ts-ignore`, empty catch, console.log in changed files)\n - Scope creep? Did the subagent touch things or add features NOT in the task spec?\n4. Cross-check every claim:\n - Said \"Updated X\" - READ X. Actually updated, or just superficially touched?\n - Said \"Added tests\" - READ the tests. Do they test REAL behavior or just `expect(true).toBe(true)`?\n - Said \"Follows patterns\" - OPEN a reference file. Does it ACTUALLY match?\n\n**If you cannot explain what every changed line does, you have NOT reviewed it.**\n\n**PHASE 2: RUN AUTOMATED CHECKS (targeted, then broad)**\n\nNow that you understand the code, verify mechanically:\n1. `lsp_diagnostics` on EACH changed file - ZERO new errors\n2. Run tests for changed modules FIRST, then full suite\n3. Build/typecheck - exit 0\n\nIf Phase 1 found issues but Phase 2 passes: Phase 2 is WRONG. The code has bugs that tests don't cover. Fix the code.\n\n**PHASE 3: HANDS-ON QA - ACTUALLY RUN IT (MANDATORY for user-facing changes)**\n\nTests and linters CANNOT catch: visual bugs, wrong CLI output, broken user flows, API response shape issues.\n\n**If this task produced anything a user would SEE or INTERACT with, you MUST launch it and verify yourself.**\n\n- **Frontend/UI**: `/playwright` skill - load the page, click through the flow, check console. Verify: page loads, interactions work, console clean, responsive.\n- **TUI/CLI**: `interactive_bash` - run the command, try good input, try bad input, try --help. Verify: command runs, output correct, error messages helpful, edge inputs handled.\n- **API/Backend**: `Bash` with curl - hit the endpoint, check response body, send malformed input. Verify: returns 200, body correct, error cases return proper errors.\n- **Config/Build**: Actually start the service or import the config. Verify: loads without error, backward compatible.\n\nThis is NOT optional \"if applicable\". If the deliverable is user-facing and you did not run it, you are shipping untested work.\n\n**PHASE 4: GATE DECISION - Should you proceed to the next task?**\n\nAnswer honestly:\n1. Can I explain what EVERY changed line does? (If no - back to Phase 1)\n2. Did I SEE it work with my own eyes? (If user-facing and no - back to Phase 3)\n3. Am I confident nothing existing is broken? (If no - run broader tests)\n\nALL three must be YES. \"Probably\" = NO. \"I think so\" = NO. Investigate until CERTAIN.\n\n- **All 3 YES** - Proceed: mark task complete, move to next.\n- **Any NO** - Reject: resume with `task_id`, fix the specific issue.\n- **Unsure** - Reject: \"unsure\" = \"no\". Investigate until you have a definitive answer.\n\n**DO NOT proceed to the next task until all 4 phases are complete and the gate passes.**";
|
|
5
|
-
export declare const VERIFICATION_REMINDER_GEMINI = "**THE SUBAGENT HAS FINISHED. THEIR WORK IS EXTREMELY SUSPICIOUS.**\n\nThe subagent CLAIMS this task is done. Based on thousands of executions, subagent claims are FALSE more often than true.\nThey ROUTINELY:\n- Ship code with syntax errors they didn't bother to check\n- Create stub implementations with TODOs and call it \"done\"\n- Write tests that pass trivially (testing nothing meaningful)\n- Implement logic that does NOT match what was requested\n- Add features nobody asked for and call it \"improvement\"\n- Report \"all tests pass\" when they didn't run any tests\n\n**This is NOT a theoretical warning. This WILL happen on this task. Assume the work is BROKEN.**\n\n**YOU MUST VERIFY WITH ACTUAL TOOL CALLS. NOT REASONING. TOOL CALLS.**\nThinking \"it looks correct\" is NOT verification. Running `lsp_diagnostics` IS.\n\n---\n\n**PHASE 1: READ THE CODE FIRST (DO NOT SKIP - DO NOT RUN TESTS YET)**\n\nRead the code FIRST so you know what you're testing.\n\n1. `Bash(\"git diff --stat -- ':!node_modules'\")` - see exactly which files changed.\n2. `Read` EVERY changed file - no exceptions, no skimming.\n3. For EACH file:\n - Does this code ACTUALLY do what the task required? RE-READ the task spec.\n - Any stubs, TODOs, placeholders? `Grep` for TODO, FIXME, HACK, xxx\n - Anti-patterns? `Grep` for `as any`, `@ts-ignore`, empty catch\n - Scope creep? Did the subagent add things NOT in the task spec?\n4. Cross-check EVERY claim against actual code.\n\n**If you cannot explain what every changed line does, GO BACK AND READ AGAIN.**\n\n**PHASE 2: RUN AUTOMATED CHECKS**\n\n1. `lsp_diagnostics` on EACH changed file - ZERO new errors. ACTUALLY RUN THIS.\n2. Run tests for changed modules, then full suite. ACTUALLY RUN THESE.\n3. Build/typecheck - exit 0.\n\nIf Phase 1 found issues but Phase 2 passes: Phase 2 is WRONG. Fix the code.\n\n**PHASE 3: HANDS-ON QA (MANDATORY for user-facing changes)**\n\n- **Frontend/UI**: `/playwright`\n- **TUI/CLI**: `interactive_bash`\n- **API/Backend**: `Bash` with curl\n\n**If user-facing and you did not run it, you are shipping UNTESTED BROKEN work.**\n\n**PHASE 4: GATE DECISION**\n\n1. Can I explain what EVERY changed line does? (If no \u2192 Phase 1)\n2. Did I SEE it work via tool calls? (If user-facing and no \u2192 Phase 3)\n3. Am I confident nothing is broken? (If no \u2192 broader tests)\n\nALL three must be YES. \"Probably\" = NO. \"I think so\" = NO.\n\n**DO NOT proceed to the next task until all 4 phases are complete.**";
|
|
6
5
|
export declare const ORCHESTRATOR_DELEGATION_REQUIRED: string;
|
|
7
6
|
export declare const SINGLE_TASK_DIRECTIVE: string;
|
package/dist/index.js
CHANGED
|
@@ -84416,21 +84416,21 @@ function restoreMessageCursor(sessionID, cursor) {
|
|
|
84416
84416
|
sessionCursors.set(sessionID, cloneCursorState(cursor));
|
|
84417
84417
|
}
|
|
84418
84418
|
// packages/omo-opencode/src/shared/shell-env.ts
|
|
84419
|
-
function detectShellType() {
|
|
84420
|
-
if (
|
|
84421
|
-
const shell =
|
|
84419
|
+
function detectShellType(platform = process.platform, env2 = process.env) {
|
|
84420
|
+
if (env2.SHELL) {
|
|
84421
|
+
const shell = env2.SHELL;
|
|
84422
84422
|
if (shell.includes("csh") || shell.includes("tcsh")) {
|
|
84423
84423
|
return "csh";
|
|
84424
84424
|
}
|
|
84425
84425
|
return "unix";
|
|
84426
84426
|
}
|
|
84427
|
-
if (
|
|
84427
|
+
if (platform === "win32" && (env2.BASH_VERSION || env2.MSYSTEM || env2.WSL_DISTRO_NAME)) {
|
|
84428
84428
|
return "unix";
|
|
84429
84429
|
}
|
|
84430
|
-
if (
|
|
84430
|
+
if (env2.PSModulePath) {
|
|
84431
84431
|
return "powershell";
|
|
84432
84432
|
}
|
|
84433
|
-
return
|
|
84433
|
+
return platform === "win32" ? "cmd" : "unix";
|
|
84434
84434
|
}
|
|
84435
84435
|
function shellEscape(value, shellType) {
|
|
84436
84436
|
if (value === "") {
|
|
@@ -98726,7 +98726,7 @@ function getCachedVersion(options = {}) {
|
|
|
98726
98726
|
// package.json
|
|
98727
98727
|
var package_default = {
|
|
98728
98728
|
name: "oh-my-opencode",
|
|
98729
|
-
version: "5.0.0-beta.
|
|
98729
|
+
version: "5.0.0-beta.9",
|
|
98730
98730
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
98731
98731
|
main: "./dist/index.js",
|
|
98732
98732
|
types: "dist/index.d.ts",
|
|
@@ -98862,6 +98862,7 @@ var package_default = {
|
|
|
98862
98862
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
98863
98863
|
test: "bun test",
|
|
98864
98864
|
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
98865
|
+
"test:fast": "bun run script/test-fast.ts",
|
|
98865
98866
|
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi",
|
|
98866
98867
|
"test:windows-codex": "bun run test:codex",
|
|
98867
98868
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
@@ -98906,7 +98907,7 @@ var package_default = {
|
|
|
98906
98907
|
zod: "^4.4.3"
|
|
98907
98908
|
},
|
|
98908
98909
|
devDependencies: {
|
|
98909
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
98910
|
+
"@code-yeongyu/senpi": "2026.8.17",
|
|
98910
98911
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
98911
98912
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
98912
98913
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -98947,18 +98948,18 @@ var package_default = {
|
|
|
98947
98948
|
typescript: "^7.0.2"
|
|
98948
98949
|
},
|
|
98949
98950
|
optionalDependencies: {
|
|
98950
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
98951
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
98952
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
98953
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
98954
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
98955
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
98956
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
98957
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
98958
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
98959
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
98960
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
98961
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
98951
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.9",
|
|
98952
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.9",
|
|
98953
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.9",
|
|
98954
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.9",
|
|
98955
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.9",
|
|
98956
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.9",
|
|
98957
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.9",
|
|
98958
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.9",
|
|
98959
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.9",
|
|
98960
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.9",
|
|
98961
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.9",
|
|
98962
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.9"
|
|
98962
98963
|
},
|
|
98963
98964
|
overrides: {
|
|
98964
98965
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -116413,6 +116414,10 @@ async function handleAtlasSessionIdle(input) {
|
|
|
116413
116414
|
return;
|
|
116414
116415
|
}
|
|
116415
116416
|
const { boulderState, progress, appendedSession } = activeBoulderSession;
|
|
116417
|
+
if (sessionState.waitingForFinalWaveApproval) {
|
|
116418
|
+
log2(`[${HOOK_NAME9}] Skipped: waiting for explicit final-wave approval`, { sessionID });
|
|
116419
|
+
return;
|
|
116420
|
+
}
|
|
116416
116421
|
if (progress.isComplete) {
|
|
116417
116422
|
await handleCompletedBoulderIdle({ ctx, options, sessionID, sessionState, boulderState });
|
|
116418
116423
|
return;
|
|
@@ -116440,10 +116445,6 @@ async function handleAtlasSessionIdle(input) {
|
|
|
116440
116445
|
const now = Date.now();
|
|
116441
116446
|
const activePlanPath = resolveBoulderPlanPath(ctx.directory, boulderState);
|
|
116442
116447
|
resetStallStateForPlanChange(sessionState, activePlanPath);
|
|
116443
|
-
if (sessionState.waitingForFinalWaveApproval) {
|
|
116444
|
-
log2(`[${HOOK_NAME9}] Skipped: waiting for explicit final-wave approval`, { sessionID });
|
|
116445
|
-
return;
|
|
116446
|
-
}
|
|
116447
116448
|
if (sessionState.stalledContinuationReason) {
|
|
116448
116449
|
log2(`[${HOOK_NAME9}] Skipped: boulder continuation stalled`, {
|
|
116449
116450
|
sessionID,
|
|
@@ -13,7 +13,7 @@ export type ShellType = "unix" | "powershell" | "cmd" | "csh";
|
|
|
13
13
|
* specific (BASH_VERSION, MSYSTEM, WSL_DISTRO_NAME) — TERM is excluded
|
|
14
14
|
* because some PowerShell users set it manually.
|
|
15
15
|
*/
|
|
16
|
-
export declare function detectShellType(): ShellType;
|
|
16
|
+
export declare function detectShellType(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): ShellType;
|
|
17
17
|
/**
|
|
18
18
|
* Shell-escape a value for use in environment variable assignment.
|
|
19
19
|
*
|
|
@@ -1,19 +1,46 @@
|
|
|
1
1
|
# ATTRIBUTION / NOTICE
|
|
2
2
|
|
|
3
3
|
This skill (`ultimate-browsing`, part of `@oh-my-opencode/shared-skills`) ships
|
|
4
|
-
project-original content
|
|
5
|
-
(it does NOT vendor their source).
|
|
6
|
-
notices are reproduced below.
|
|
4
|
+
project-original content, one vendored-and-modified upstream engine, plus two
|
|
5
|
+
third-party tools that it installs at runtime (it does NOT vendor their source).
|
|
6
|
+
Each component's provenance, license, and required notices are reproduced below.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
## 1.
|
|
10
|
+
## 1. insane-search engine — vendored upstream snapshot, modified
|
|
11
|
+
|
|
12
|
+
`engine/**` originates from the **insane-search** project and is NOT
|
|
13
|
+
project-original code, despite being heavily modified since import.
|
|
14
|
+
|
|
15
|
+
- Upstream source: https://github.com/fivetaku/insane-search
|
|
16
|
+
- Vendored into this repository on 2026-06-21 by commit
|
|
17
|
+
**`a4e4ed797`** (`feat(ultimate-browsing): vendor insane-search engine (junk-excluded)`),
|
|
18
|
+
via an explicit file whitelist that excluded caches and smoke-test junk.
|
|
19
|
+
- Baseline: the upstream state as of that date, a **pre-0.7.0 snapshot**.
|
|
20
|
+
Upstream's CHANGELOG dates 0.7.0 to 2026-06-22; imported files carry no
|
|
21
|
+
version marker. We have never re-vendored since; the tree has diverged in
|
|
22
|
+
both directions.
|
|
23
|
+
- Modifications by this project (non-exhaustive): de-personalization
|
|
24
|
+
(`4743199a5`), the Phase 2.5 surrogate retrieval stage and surrogate registry,
|
|
25
|
+
the provenance/trust result contract, the `bias_check.py` no-site-name CI gate,
|
|
26
|
+
module split of the fetch chain, and the Python test suite under
|
|
27
|
+
`engine/tests/`.
|
|
28
|
+
- No upstream `LICENSE` file was included in the vendored snapshot, so this
|
|
29
|
+
repository has no upstream license text to reproduce here. Do not infer
|
|
30
|
+
project-original licensing from that absence; treat `engine/**` as
|
|
31
|
+
upstream-derived when reasoning about provenance.
|
|
32
|
+
|
|
33
|
+
The binding version policy — which upstream baseline we sit on, why we stay
|
|
34
|
+
pinned, what a future re-vendor must preserve, and what it must not import — is
|
|
35
|
+
[`engine/AGENTS.md` §UPSTREAM BASELINE AND VERSION POLICY](engine/AGENTS.md).
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 2. Project-original content (no third-party source vendored)
|
|
11
40
|
|
|
12
41
|
The following are authored by the oh-my-openagent project and carry no third-party
|
|
13
42
|
license obligation:
|
|
14
43
|
|
|
15
|
-
- `engine/**` — the insane-search Tier-1 fetch engine (curl_cffi grid, WAF
|
|
16
|
-
detection, Playwright fallback templates, `bias_check.py` no-site-name gate).
|
|
17
44
|
- `references/insane-search/**` and `references/agent-reach/**` — the Tier-1 and
|
|
18
45
|
Tier-1.5 reference docs.
|
|
19
46
|
- `scripts/extract_cookies.py`, `scripts/cookie_paths.py`, `scripts/cookie_crypto.py`
|
|
@@ -26,7 +53,7 @@ user installs separately; this skill includes none of their source.
|
|
|
26
53
|
|
|
27
54
|
---
|
|
28
55
|
|
|
29
|
-
##
|
|
56
|
+
## 3. CloakBrowser (CloakHQ) — Tier-2 stealth Chromium (runtime dependency)
|
|
30
57
|
|
|
31
58
|
The Tier-2 stealth browser is **CloakBrowser**, installed at runtime via `pip`
|
|
32
59
|
(`pip install cloakbrowser`). No CloakBrowser source is vendored in this repository.
|
|
@@ -73,7 +100,7 @@ SOFTWARE.
|
|
|
73
100
|
|
|
74
101
|
---
|
|
75
102
|
|
|
76
|
-
##
|
|
103
|
+
## 4. agent-browser (vercel-labs) — Tier-2 CDP automation CLI (runtime dependency)
|
|
77
104
|
|
|
78
105
|
The Tier-2 automation CLI is **agent-browser**, installed at runtime via `npm`
|
|
79
106
|
(`npm i -g agent-browser`). No agent-browser source is vendored in this repository.
|
|
@@ -2,6 +2,116 @@
|
|
|
2
2
|
|
|
3
3
|
**Generated:** 2026-08-10 / 38d268995
|
|
4
4
|
|
|
5
|
+
## UPSTREAM BASELINE AND VERSION POLICY
|
|
6
|
+
|
|
7
|
+
**READ THIS BEFORE TOUCHING `engine/**` OR PROPOSING AN UPSTREAM SYNC.**
|
|
8
|
+
|
|
9
|
+
This engine is NOT project-original code. It is a vendored-and-modified snapshot of
|
|
10
|
+
[fivetaku/insane-search](https://github.com/fivetaku/insane-search), and the version
|
|
11
|
+
we run on is a deliberate choice, not an accident of neglect.
|
|
12
|
+
|
|
13
|
+
### The pin
|
|
14
|
+
|
|
15
|
+
| Fact | Value |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Upstream project | `https://github.com/fivetaku/insane-search` |
|
|
18
|
+
| Vendoring commit | `a4e4ed797` (2026-06-21) `feat(ultimate-browsing): vendor insane-search engine (junk-excluded)` |
|
|
19
|
+
| De-personalization | `4743199a5` (2026-06-21) |
|
|
20
|
+
| Pinned upstream baseline | upstream state as of 2026-06-21, **pre-0.7.0** (0.7.0 is dated 2026-06-22) |
|
|
21
|
+
| Re-vendors since | none — every later change here is ours |
|
|
22
|
+
|
|
23
|
+
We intentionally track a **pinned baseline plus local divergence**, not upstream HEAD.
|
|
24
|
+
There is no submodule and no automated drift check for this engine (unlike the
|
|
25
|
+
`frontend` skill's upstream submodules): the vendored files ARE the source of truth,
|
|
26
|
+
and upstream is a reference we port FROM, deliberately, file by file.
|
|
27
|
+
|
|
28
|
+
### Why we do not blind-rebase onto upstream HEAD
|
|
29
|
+
|
|
30
|
+
1. **Upstream reset its public history.** On 2026-08-06 upstream published a single
|
|
31
|
+
squashed commit, `019ee16 refactor: reset public history at 0.14.0`, discarding the
|
|
32
|
+
prior public history through 0.13.x. There is no upstream commit graph to rebase onto and no
|
|
33
|
+
way to cherry-pick an individual upstream change by sha — only whole-file diffing
|
|
34
|
+
against a moving HEAD.
|
|
35
|
+
2. **Upstream 0.14.0 REMOVED capability.** The endpoint-mining / internal-API
|
|
36
|
+
auto-derivation / site-recipe subsystems that upstream carried publicly between
|
|
37
|
+
0.12.0 and 0.14.0 are gone from upstream HEAD. Syncing to HEAD is therefore not
|
|
38
|
+
strictly an upgrade: parts of it are a downgrade relative to the intermediate
|
|
39
|
+
versions, and none of it is recoverable from the reset history.
|
|
40
|
+
3. **Our tree diverged on purpose.** The KEEP list below is functionality upstream
|
|
41
|
+
never had. A wholesale overwrite with upstream HEAD would silently delete it.
|
|
42
|
+
4. **Different threat model.** Our engine ships inside a published npm package and a
|
|
43
|
+
public marketplace mirror, under a CI no-site-name gate and a de-personalization
|
|
44
|
+
deny-list. Upstream carries neither constraint, so upstream code is not
|
|
45
|
+
drop-in-shippable here.
|
|
46
|
+
|
|
47
|
+
### KEEP — our divergences a re-vendor MUST NOT regress
|
|
48
|
+
|
|
49
|
+
These exist only in our tree. Any upstream sync that removes or bypasses one of them
|
|
50
|
+
is a regression, not an upgrade:
|
|
51
|
+
|
|
52
|
+
- **Phase 2.5 surrogate retrieval** (`surrogate.py`, `surrogates.yaml`) — archive /
|
|
53
|
+
reader / proxy routes tried before paying for a browser spin-up, with per-entry
|
|
54
|
+
`last_verified` staleness handling and `--allow-proxy` gating.
|
|
55
|
+
- **Provenance / trust contract** (`result_schema.py`) — `Provenance` and `Trust`
|
|
56
|
+
literals on every result, so a snapshot can never be reported as the live page.
|
|
57
|
+
- **Surrogate dead-end validation** (L1.5 in `validators.py`) — interstitial titles and
|
|
58
|
+
AMP-style redirect stubs rejected instead of returned as content.
|
|
59
|
+
- **The no-site-name rule and its CI gate** (`bias_check.py`) — zero hard-coded site
|
|
60
|
+
names, brands, or target domains in `engine/**`.
|
|
61
|
+
- **Module split of the fetch chain** — `curl_probe` / `referers` / `url_transforms` /
|
|
62
|
+
`waf_detector` / `validators` / `executor` / `summary` as separate modules rather than
|
|
63
|
+
one monolith.
|
|
64
|
+
- **The Python test suite** under `engine/tests/` with its HTML/JSON fixtures.
|
|
65
|
+
- **De-personalization** — no personal absolute paths, no personal auth token literals,
|
|
66
|
+
no personal browser choice; enforced by `depersonalization-gate.test.ts`.
|
|
67
|
+
- **Skill-level layering** — the engine is Tier 1 under a router that also owns Tier 1.5
|
|
68
|
+
(agent-reach) and Tier 2 (CloakBrowser + agent-browser). Upstream has no such tiering.
|
|
69
|
+
|
|
70
|
+
### WANT — upstream improvements worth porting forward
|
|
71
|
+
|
|
72
|
+
Our snapshot predates these; they are wanted, and each must be ported as a reviewed,
|
|
73
|
+
site-agnostic change that preserves every KEEP item above. Port individually; never as
|
|
74
|
+
a tree overwrite:
|
|
75
|
+
|
|
76
|
+
- **Content quality**: dedicated markdown conversion of fetched HTML, main-content
|
|
77
|
+
extraction, PDF text extraction, and JSON-LD rescue when the HTML body is thin.
|
|
78
|
+
- **Transient-failure retry** and **render-merge** of statically fetched HTML with the
|
|
79
|
+
browser-rendered DOM.
|
|
80
|
+
- **Differential block classification** — distinguishing a bot-detection block from an
|
|
81
|
+
infrastructure or authentication failure, instead of collapsing both into `challenge`.
|
|
82
|
+
- **Additional stealth fetch backends** beyond the current Playwright templates, and
|
|
83
|
+
additional WAF vendor profiles.
|
|
84
|
+
- **Per-host route learning** — remembering which route succeeded for a host, with a TTL
|
|
85
|
+
and a bounded store. Must stay runtime state, never committed site knowledge (R4).
|
|
86
|
+
- **Engine-level Phase 0 routing** — the official-public-API preference is currently only
|
|
87
|
+
a documented rule (R5) the agent can skip; upstream moved it into code so it cannot be
|
|
88
|
+
skipped. Worth adopting.
|
|
89
|
+
|
|
90
|
+
### OUT OF SCOPE
|
|
91
|
+
|
|
92
|
+
- **The removed upstream endpoint-mining / internal-API auto-derivation / site-recipe
|
|
93
|
+
subsystems.** They are absent from upstream HEAD and are not reconstructed here. They
|
|
94
|
+
also sit against R3/R4 and R7's anti-bias rule: discovered internal endpoints are
|
|
95
|
+
runtime findings, never committed engine knowledge.
|
|
96
|
+
- **Any upstream code carrying site-specific selectors, domains, or brand names.** It
|
|
97
|
+
fails `bias_check.py` at the door; re-derive it site-agnostically or leave it out.
|
|
98
|
+
- **Automated upstream tracking.** No submodule, no drift check, no auto-bump. Syncing is
|
|
99
|
+
a deliberate, reviewed, human-initiated act.
|
|
100
|
+
|
|
101
|
+
### THE SYNC RULE
|
|
102
|
+
|
|
103
|
+
Any future upstream sync preserves BOTH sides. Concretely:
|
|
104
|
+
|
|
105
|
+
1. Diff the specific upstream capability you want against our tree — do not overwrite
|
|
106
|
+
files wholesale, and never `git checkout` upstream over `engine/`.
|
|
107
|
+
2. Port it as its own reviewed change, keeping every KEEP item intact.
|
|
108
|
+
3. Re-run `python3 engine/bias_check.py` and the `engine/tests/` suite; a port that
|
|
109
|
+
introduces a site name or breaks a fixture does not ship.
|
|
110
|
+
4. Update the pin table above (baseline, date, what was ported) in the same change, plus
|
|
111
|
+
the provenance section of [`../ATTRIBUTION.md`](../ATTRIBUTION.md).
|
|
112
|
+
5. If a port must drop a KEEP item, say so explicitly in the PR and get it agreed first —
|
|
113
|
+
silent regressions of the KEEP list are the failure mode this policy exists to prevent.
|
|
114
|
+
|
|
5
115
|
## OVERVIEW
|
|
6
116
|
|
|
7
117
|
A 17-module Python package embedded in the `ultimate-browsing` skill: a site-agnostic fetch chain that escalates from a cheap curl probe to a real browser, with declarative WAF and surrogate registries. Not "optional scripts" — it has its own CLI entry (`python3 -m engine URL`), two YAML config schemas, a 4-file test suite, and a standalone CI guard. Package exports (`__init__.py`): `fetch`, `FetchResult`, `Attempt`, `Verdict`, `ValidationResult`, `validate`, `CHALLENGE_MARKERS`, `detect`, `TRANSFORMS`, `apply_transform`.
|
package/dist/tui.js
CHANGED
|
@@ -15197,7 +15197,7 @@ function finalize(ctx, schema) {
|
|
|
15197
15197
|
result.$schema = "http://json-schema.org/draft-07/schema#";
|
|
15198
15198
|
} else if (ctx.target === "draft-04") {
|
|
15199
15199
|
result.$schema = "http://json-schema.org/draft-04/schema#";
|
|
15200
|
-
} else if (ctx.target === "openapi-3.0") {}
|
|
15200
|
+
} else if (ctx.target === "openapi-3.0") {}
|
|
15201
15201
|
if (ctx.external?.uri) {
|
|
15202
15202
|
const id = ctx.external.registry.get(schema)?.id;
|
|
15203
15203
|
if (!id)
|
|
@@ -15458,7 +15458,7 @@ var formatMap, stringProcessor = (schema, ctx, _json, _params) => {
|
|
|
15458
15458
|
if (val === undefined) {
|
|
15459
15459
|
if (ctx.unrepresentable === "throw") {
|
|
15460
15460
|
throw new Error("Literal `undefined` cannot be represented in JSON Schema");
|
|
15461
|
-
}
|
|
15461
|
+
}
|
|
15462
15462
|
} else if (typeof val === "bigint") {
|
|
15463
15463
|
if (ctx.unrepresentable === "throw") {
|
|
15464
15464
|
throw new Error("BigInt literals cannot be represented in JSON Schema");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.9",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
137
137
|
"test": "bun test",
|
|
138
138
|
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && npm --prefix packages/omo-codex/plugin/components/codegraph run typecheck && npm --prefix packages/omo-codex/plugin/components/codegraph test && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
139
|
+
"test:fast": "bun run script/test-fast.ts",
|
|
139
140
|
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi",
|
|
140
141
|
"test:windows-codex": "bun run test:codex",
|
|
141
142
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
@@ -180,7 +181,7 @@
|
|
|
180
181
|
"zod": "^4.4.3"
|
|
181
182
|
},
|
|
182
183
|
"devDependencies": {
|
|
183
|
-
"@code-yeongyu/senpi": "2026.8.
|
|
184
|
+
"@code-yeongyu/senpi": "2026.8.17",
|
|
184
185
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
185
186
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
186
187
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -221,18 +222,18 @@
|
|
|
221
222
|
"typescript": "^7.0.2"
|
|
222
223
|
},
|
|
223
224
|
"optionalDependencies": {
|
|
224
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
225
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
226
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
227
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
228
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
229
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
230
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
231
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
232
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
233
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
234
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
235
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
225
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.9",
|
|
226
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.9",
|
|
227
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.9",
|
|
228
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.9",
|
|
229
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.9",
|
|
230
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.9",
|
|
231
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.9",
|
|
232
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.9",
|
|
233
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.9",
|
|
234
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.9",
|
|
235
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.9",
|
|
236
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.9"
|
|
236
237
|
},
|
|
237
238
|
"overrides": {
|
|
238
239
|
"@earendil-works/pi-agent-core": "0.84.2",
|