oh-my-openagent 5.1.5 → 5.1.7
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/dist/cli/index.js +41 -17
- package/dist/cli/run/runnable-agent-resolver.d.ts +3 -0
- package/dist/cli-node/index.js +41 -17
- package/dist/hooks/goal/validation.d.ts +1 -0
- package/dist/hooks/no-hephaestus-non-gpt/hook.d.ts +4 -0
- package/dist/index.js +78 -36
- package/dist/plugin/chat-message/loop-commands.d.ts +1 -0
- package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
- package/dist/skills/ulw-execute/SKILL.md +1 -1
- package/dist/tui.js +14 -14
- package/package.json +14 -14
- package/packages/lsp-core/src/post-edit/file-location.ts +7 -2
- package/packages/lsp-core/src/post-edit/not-installed.test.ts +25 -0
- package/packages/lsp-core/src/tool-surface.test.ts +11 -11
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +7 -0
- 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/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/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/README.md +0 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +1 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +1 -1
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +25 -18
- 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/src/directive-content.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +25 -18
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +16 -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 +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-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 +1 -1
- 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/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +25 -18
- package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +1 -1
- package/packages/omo-codex/scripts/install-config-autonomous-features.test.mjs +24 -4
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +9 -2
- package/packages/prompts-core/prompts/ultrawork/codex.md +25 -18
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -1
- package/dist/features/team-mode/team-layout-tmux/close-team-member-pane.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/claim.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/dependencies.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/get.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/store.d.ts +0 -1
- package/dist/features/team-mode/team-tasklist/update.d.ts +0 -1
- package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +0 -29
- package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +0 -13
- package/dist/openclaw/config.d.ts +0 -1
- package/dist/openclaw/dispatcher.d.ts +0 -1
- package/dist/openclaw/gateway-url-validation.d.ts +0 -1
- package/dist/openclaw/reply-listener-injection.d.ts +0 -1
- package/dist/openclaw/reply-listener-start.d.ts +0 -1
- package/dist/openclaw/session-registry.d.ts +0 -1
- package/dist/openclaw/tmux.d.ts +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -64,7 +64,7 @@ var package_default;
|
|
|
64
64
|
var init_package = __esm(() => {
|
|
65
65
|
package_default = {
|
|
66
66
|
name: "oh-my-opencode",
|
|
67
|
-
version: "5.1.
|
|
67
|
+
version: "5.1.7",
|
|
68
68
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
69
69
|
main: "./dist/index.js",
|
|
70
70
|
types: "dist/index.d.ts",
|
|
@@ -241,7 +241,7 @@ var init_package = __esm(() => {
|
|
|
241
241
|
},
|
|
242
242
|
devDependencies: {
|
|
243
243
|
"@clack/prompts": "^1.8.1",
|
|
244
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
244
|
+
"@code-yeongyu/senpi": "2026.9.30",
|
|
245
245
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
246
246
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
247
247
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -299,18 +299,18 @@ var init_package = __esm(() => {
|
|
|
299
299
|
typescript: "^7.0.2"
|
|
300
300
|
},
|
|
301
301
|
optionalDependencies: {
|
|
302
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
303
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
304
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
305
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
306
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
307
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
308
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
309
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
310
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
311
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
312
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
313
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
302
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
303
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
304
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
305
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
306
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
307
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
308
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
309
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
310
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
311
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
312
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
313
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
314
314
|
},
|
|
315
315
|
overrides: {
|
|
316
316
|
hono: "^4.13.8",
|
|
@@ -89377,7 +89377,7 @@ var package_default2;
|
|
|
89377
89377
|
var init_package2 = __esm(() => {
|
|
89378
89378
|
package_default2 = {
|
|
89379
89379
|
name: "@oh-my-opencode/omo-codex",
|
|
89380
|
-
version: "5.1.
|
|
89380
|
+
version: "5.1.7",
|
|
89381
89381
|
type: "module",
|
|
89382
89382
|
private: true,
|
|
89383
89383
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -95097,6 +95097,12 @@ ${featureName} = true
|
|
|
95097
95097
|
}
|
|
95098
95098
|
return replaceOrInsertSetting(config, section, featureName, "true");
|
|
95099
95099
|
}
|
|
95100
|
+
function removeFeature(config, featureName) {
|
|
95101
|
+
const section = findTomlSection(config, "features");
|
|
95102
|
+
if (section !== null)
|
|
95103
|
+
return removeSetting(config, section, featureName);
|
|
95104
|
+
return removeRootSetting(config, `features.${featureName}`);
|
|
95105
|
+
}
|
|
95100
95106
|
|
|
95101
95107
|
// packages/omo-codex/src/install/codex-config-marketplaces.ts
|
|
95102
95108
|
var SISYPHUS_LEGACY_MARKETPLACES = ["lazycodex", "code-yeongyu-codex-plugins"];
|
|
@@ -95689,6 +95695,7 @@ async function updateCodexConfig(input) {
|
|
|
95689
95695
|
config = ensureFeatureEnabled(config, "plugins");
|
|
95690
95696
|
config = ensureFeatureEnabled(config, "plugin_hooks");
|
|
95691
95697
|
config = ensureFeatureEnabled(config, "multi_agent");
|
|
95698
|
+
config = removeFeature(config, "child_agents_md");
|
|
95692
95699
|
config = removeUnsupportedCodexMultiAgentModeConfig(config);
|
|
95693
95700
|
config = ensureCodexReasoningConfig(config, applyReasoningOverride(await readCodexModelCatalog(input.repoRoot), input.reasoning));
|
|
95694
95701
|
config = ensureCodexMultiAgentV2Config(config, {
|
|
@@ -105346,12 +105353,25 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105346
105353
|
})?.name;
|
|
105347
105354
|
if (configuredAgent)
|
|
105348
105355
|
return configuredAgent;
|
|
105349
|
-
|
|
105356
|
+
const matched = agents.find((agent) => {
|
|
105350
105357
|
if (!agent.name)
|
|
105351
105358
|
return false;
|
|
105352
105359
|
return getAgentConfigKey(agent.name) === resolvedConfigKey;
|
|
105353
|
-
})?.name
|
|
105360
|
+
})?.name;
|
|
105361
|
+
if (matched)
|
|
105362
|
+
return matched;
|
|
105363
|
+
const registered = agents.map((agent) => agent.name).filter((name) => Boolean(name));
|
|
105364
|
+
const parsedCategory = BuiltinCategoryNameSchema.safeParse(resolvedConfigKey);
|
|
105365
|
+
if (parsedCategory.success) {
|
|
105366
|
+
throw new UnknownRunAgentError(`"${resolvedAgent}" is a task() category, not a CLI agent. Categories: ${BuiltinCategoryNameSchema.options.join(", ")}. Runnable agents: ${registered.join(", ") || "(none)"}.`);
|
|
105367
|
+
}
|
|
105368
|
+
if (registered.length > 0) {
|
|
105369
|
+
throw new UnknownRunAgentError(`Unknown agent "${resolvedAgent}". Runnable agents: ${registered.join(", ")}.`);
|
|
105370
|
+
}
|
|
105371
|
+
return resolvedAgent;
|
|
105354
105372
|
} catch (error) {
|
|
105373
|
+
if (error instanceof UnknownRunAgentError)
|
|
105374
|
+
throw error;
|
|
105355
105375
|
if (!(error instanceof Error)) {
|
|
105356
105376
|
throw error;
|
|
105357
105377
|
}
|
|
@@ -105359,6 +105379,10 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105359
105379
|
}
|
|
105360
105380
|
}
|
|
105361
105381
|
|
|
105382
|
+
class UnknownRunAgentError extends Error {
|
|
105383
|
+
name = "UnknownRunAgentError";
|
|
105384
|
+
}
|
|
105385
|
+
|
|
105362
105386
|
// packages/omo-opencode/src/cli/run/runner.ts
|
|
105363
105387
|
var EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS = 2000;
|
|
105364
105388
|
async function waitForEventProcessorShutdown(eventProcessor, timeoutMs = EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS) {
|
|
@@ -9,3 +9,6 @@ export interface RunAgentDisplayNameConfig {
|
|
|
9
9
|
} | undefined>>;
|
|
10
10
|
}
|
|
11
11
|
export declare function resolveRunnableRunAgent(client: RunAgentListClient, resolvedAgent: string, config?: RunAgentDisplayNameConfig): Promise<string>;
|
|
12
|
+
export declare class UnknownRunAgentError extends Error {
|
|
13
|
+
readonly name = "UnknownRunAgentError";
|
|
14
|
+
}
|
package/dist/cli-node/index.js
CHANGED
|
@@ -65,7 +65,7 @@ var package_default;
|
|
|
65
65
|
var init_package = __esm(() => {
|
|
66
66
|
package_default = {
|
|
67
67
|
name: "oh-my-opencode",
|
|
68
|
-
version: "5.1.
|
|
68
|
+
version: "5.1.7",
|
|
69
69
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
70
70
|
main: "./dist/index.js",
|
|
71
71
|
types: "dist/index.d.ts",
|
|
@@ -242,7 +242,7 @@ var init_package = __esm(() => {
|
|
|
242
242
|
},
|
|
243
243
|
devDependencies: {
|
|
244
244
|
"@clack/prompts": "^1.8.1",
|
|
245
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
245
|
+
"@code-yeongyu/senpi": "2026.9.30",
|
|
246
246
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
247
247
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
248
248
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -300,18 +300,18 @@ var init_package = __esm(() => {
|
|
|
300
300
|
typescript: "^7.0.2"
|
|
301
301
|
},
|
|
302
302
|
optionalDependencies: {
|
|
303
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
304
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
305
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
306
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
307
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
308
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
309
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
310
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
311
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
312
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
313
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
314
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
303
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
304
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
305
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
306
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
307
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
308
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
309
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
310
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
311
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
312
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
313
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
314
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
315
315
|
},
|
|
316
316
|
overrides: {
|
|
317
317
|
hono: "^4.13.8",
|
|
@@ -89456,7 +89456,7 @@ var package_default2;
|
|
|
89456
89456
|
var init_package2 = __esm(() => {
|
|
89457
89457
|
package_default2 = {
|
|
89458
89458
|
name: "@oh-my-opencode/omo-codex",
|
|
89459
|
-
version: "5.1.
|
|
89459
|
+
version: "5.1.7",
|
|
89460
89460
|
type: "module",
|
|
89461
89461
|
private: true,
|
|
89462
89462
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -95176,6 +95176,12 @@ ${featureName} = true
|
|
|
95176
95176
|
}
|
|
95177
95177
|
return replaceOrInsertSetting(config, section, featureName, "true");
|
|
95178
95178
|
}
|
|
95179
|
+
function removeFeature(config, featureName) {
|
|
95180
|
+
const section = findTomlSection(config, "features");
|
|
95181
|
+
if (section !== null)
|
|
95182
|
+
return removeSetting(config, section, featureName);
|
|
95183
|
+
return removeRootSetting(config, `features.${featureName}`);
|
|
95184
|
+
}
|
|
95179
95185
|
|
|
95180
95186
|
// packages/omo-codex/src/install/codex-config-marketplaces.ts
|
|
95181
95187
|
var SISYPHUS_LEGACY_MARKETPLACES = ["lazycodex", "code-yeongyu-codex-plugins"];
|
|
@@ -95768,6 +95774,7 @@ async function updateCodexConfig(input) {
|
|
|
95768
95774
|
config = ensureFeatureEnabled(config, "plugins");
|
|
95769
95775
|
config = ensureFeatureEnabled(config, "plugin_hooks");
|
|
95770
95776
|
config = ensureFeatureEnabled(config, "multi_agent");
|
|
95777
|
+
config = removeFeature(config, "child_agents_md");
|
|
95771
95778
|
config = removeUnsupportedCodexMultiAgentModeConfig(config);
|
|
95772
95779
|
config = ensureCodexReasoningConfig(config, applyReasoningOverride(await readCodexModelCatalog(input.repoRoot), input.reasoning));
|
|
95773
95780
|
config = ensureCodexMultiAgentV2Config(config, {
|
|
@@ -105425,12 +105432,25 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105425
105432
|
})?.name;
|
|
105426
105433
|
if (configuredAgent)
|
|
105427
105434
|
return configuredAgent;
|
|
105428
|
-
|
|
105435
|
+
const matched = agents.find((agent) => {
|
|
105429
105436
|
if (!agent.name)
|
|
105430
105437
|
return false;
|
|
105431
105438
|
return getAgentConfigKey(agent.name) === resolvedConfigKey;
|
|
105432
|
-
})?.name
|
|
105439
|
+
})?.name;
|
|
105440
|
+
if (matched)
|
|
105441
|
+
return matched;
|
|
105442
|
+
const registered = agents.map((agent) => agent.name).filter((name) => Boolean(name));
|
|
105443
|
+
const parsedCategory = BuiltinCategoryNameSchema.safeParse(resolvedConfigKey);
|
|
105444
|
+
if (parsedCategory.success) {
|
|
105445
|
+
throw new UnknownRunAgentError(`"${resolvedAgent}" is a task() category, not a CLI agent. Categories: ${BuiltinCategoryNameSchema.options.join(", ")}. Runnable agents: ${registered.join(", ") || "(none)"}.`);
|
|
105446
|
+
}
|
|
105447
|
+
if (registered.length > 0) {
|
|
105448
|
+
throw new UnknownRunAgentError(`Unknown agent "${resolvedAgent}". Runnable agents: ${registered.join(", ")}.`);
|
|
105449
|
+
}
|
|
105450
|
+
return resolvedAgent;
|
|
105433
105451
|
} catch (error) {
|
|
105452
|
+
if (error instanceof UnknownRunAgentError)
|
|
105453
|
+
throw error;
|
|
105434
105454
|
if (!(error instanceof Error)) {
|
|
105435
105455
|
throw error;
|
|
105436
105456
|
}
|
|
@@ -105438,6 +105458,10 @@ async function resolveRunnableRunAgent(client, resolvedAgent, config = {}) {
|
|
|
105438
105458
|
}
|
|
105439
105459
|
}
|
|
105440
105460
|
|
|
105461
|
+
class UnknownRunAgentError extends Error {
|
|
105462
|
+
name = "UnknownRunAgentError";
|
|
105463
|
+
}
|
|
105464
|
+
|
|
105441
105465
|
// packages/omo-opencode/src/cli/run/runner.ts
|
|
105442
105466
|
var EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS = 2000;
|
|
105443
105467
|
async function waitForEventProcessorShutdown(eventProcessor, timeoutMs = EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS) {
|
|
@@ -2,6 +2,10 @@ import type { PluginInput } from "@opencode-ai/plugin";
|
|
|
2
2
|
type NoHephaestusNonGptHookOptions = {
|
|
3
3
|
allowNonGptModel?: boolean;
|
|
4
4
|
};
|
|
5
|
+
export declare class HephaestusRequiresGptError extends Error {
|
|
6
|
+
readonly name = "HephaestusRequiresGptError";
|
|
7
|
+
constructor(modelID: string);
|
|
8
|
+
}
|
|
5
9
|
export declare function createNoHephaestusNonGptHook(ctx: PluginInput, options?: NoHephaestusNonGptHookOptions): {
|
|
6
10
|
"chat.message": (input: {
|
|
7
11
|
sessionID: string;
|
package/dist/index.js
CHANGED
|
@@ -7901,7 +7901,7 @@ var init_powershell_zip_entry_listing = __esm(() => {
|
|
|
7901
7901
|
|
|
7902
7902
|
// packages/utils/src/zip-entry-listing/tar-zip-entry-listing.ts
|
|
7903
7903
|
function parseTarListedZipEntry(line) {
|
|
7904
|
-
const match = line.match(/^([^\s])\S*\s+\d+\s+\S+\s+\S+\s+\d+\s+\
|
|
7904
|
+
const match = line.match(/^([^\s])\S*\s+\d+\s+\S+\s+\S+\s+\d+\s+\S+\s+\d+\s+(?:\d{2}:\d{2}|\d{4})\s+(.*)$/);
|
|
7905
7905
|
if (!match) {
|
|
7906
7906
|
return null;
|
|
7907
7907
|
}
|
|
@@ -91935,11 +91935,6 @@ function resolveStartDir(startPath) {
|
|
|
91935
91935
|
function hasProjectMarker(directory) {
|
|
91936
91936
|
return PROJECT_MARKERS.some((marker) => existsSync41(join52(directory, marker)));
|
|
91937
91937
|
}
|
|
91938
|
-
// packages/agents-md-core/src/constants.ts
|
|
91939
|
-
var TRUNCATION_NOTICE_PREFIX = `
|
|
91940
|
-
|
|
91941
|
-
[Note: Content was truncated to save context window space. For full context, please read the file directly: `;
|
|
91942
|
-
var TRUNCATION_NOTICE_SUFFIX = "]";
|
|
91943
91938
|
// packages/agents-md-core/src/finder.ts
|
|
91944
91939
|
import { realpathSync as realpathSync10 } from "fs";
|
|
91945
91940
|
import { isAbsolute as isAbsolute9, relative as relative11, resolve as resolve13 } from "path";
|
|
@@ -91965,6 +91960,12 @@ function isSameOrChildPath3(childPath, parentPath) {
|
|
|
91965
91960
|
const relativePath = relative11(parentPath, childPath);
|
|
91966
91961
|
return relativePath === "" || !relativePath.startsWith("..") && !isAbsolute9(relativePath);
|
|
91967
91962
|
}
|
|
91963
|
+
// packages/agents-md-core/src/constants.ts
|
|
91964
|
+
var TRUNCATION_NOTICE_PREFIX = `
|
|
91965
|
+
|
|
91966
|
+
[Note: Content was truncated to save context window space. For full context, please read the file directly: `;
|
|
91967
|
+
var TRUNCATION_NOTICE_SUFFIX = "]";
|
|
91968
|
+
|
|
91968
91969
|
// packages/agents-md-core/src/formatter.ts
|
|
91969
91970
|
function formatAgentsMdContextBlock(input) {
|
|
91970
91971
|
const truncationNotice = input.truncated ? `${TRUNCATION_NOTICE_PREFIX}${input.agentsPath}${TRUNCATION_NOTICE_SUFFIX}` : "";
|
|
@@ -98589,7 +98590,7 @@ function getCachedVersion(options = {}) {
|
|
|
98589
98590
|
// package.json
|
|
98590
98591
|
var package_default = {
|
|
98591
98592
|
name: "oh-my-opencode",
|
|
98592
|
-
version: "5.1.
|
|
98593
|
+
version: "5.1.7",
|
|
98593
98594
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
98594
98595
|
main: "./dist/index.js",
|
|
98595
98596
|
types: "dist/index.d.ts",
|
|
@@ -98766,7 +98767,7 @@ var package_default = {
|
|
|
98766
98767
|
},
|
|
98767
98768
|
devDependencies: {
|
|
98768
98769
|
"@clack/prompts": "^1.8.1",
|
|
98769
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
98770
|
+
"@code-yeongyu/senpi": "2026.9.30",
|
|
98770
98771
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
98771
98772
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
98772
98773
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -98824,18 +98825,18 @@ var package_default = {
|
|
|
98824
98825
|
typescript: "^7.0.2"
|
|
98825
98826
|
},
|
|
98826
98827
|
optionalDependencies: {
|
|
98827
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
98828
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
98829
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
98830
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
98831
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
98832
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
98833
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
98834
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
98835
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
98836
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
98837
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
98838
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
98828
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
98829
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
98830
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
98831
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
98832
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
98833
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
98834
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
98835
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
98836
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
98837
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
98838
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
98839
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
98839
98840
|
},
|
|
98840
98841
|
overrides: {
|
|
98841
98842
|
hono: "^4.13.8",
|
|
@@ -104955,7 +104956,7 @@ Procedure (non-negotiable):
|
|
|
104955
104956
|
1. Spawn a reviewer via \`task(category="ultrabrain", subagent_type="plan", load_skills=[...], run_in_background=false, prompt="<goal + scenarios + evidence + diff + notepad path>")\` \u2014 or any high-rigor reviewer agent available.
|
|
104956
104957
|
2. Verify each reviewer concern yourself. A concern blocks only when it names a success criterion the evidence fails; record concerns that cite no criterion as notes with a one-line reason \u2014 fixed or declined at your judgment.
|
|
104957
104958
|
3. Fix every criterion-cited blocker. Re-run ONLY the scenario QA affected by the fix; capture fresh evidence for the delta. Update notepad.
|
|
104958
|
-
4.
|
|
104959
|
+
4. Spawn a NEW reviewer for each re-review, at most twice, passing only the delta diff, the blockers the last one cited, and the already-approved criteria marked out-of-scope. An approval whose only remaining items are notes counts as approval.
|
|
104959
104960
|
5. On approval, declare done. If criterion-cited blockers remain after two re-reviews, stop and surface them to the user \u2014 do not loop further.
|
|
104960
104961
|
|
|
104961
104962
|
## ZERO TOLERANCE FAILURES
|
|
@@ -108009,6 +108010,13 @@ var TOAST_MESSAGE2 = [
|
|
|
108009
108010
|
"For Claude/Kimi/GLM models, always use Sisyphus."
|
|
108010
108011
|
].join(`
|
|
108011
108012
|
`);
|
|
108013
|
+
|
|
108014
|
+
class HephaestusRequiresGptError extends Error {
|
|
108015
|
+
name = "HephaestusRequiresGptError";
|
|
108016
|
+
constructor(modelID) {
|
|
108017
|
+
super(`Hephaestus requires a GPT-family model (got ${modelID}). Use Sisyphus for non-GPT models.`);
|
|
108018
|
+
}
|
|
108019
|
+
}
|
|
108012
108020
|
function showToast2(ctx, sessionID, variant) {
|
|
108013
108021
|
ctx.client.tui.showToast({
|
|
108014
108022
|
body: {
|
|
@@ -108036,11 +108044,13 @@ function createNoHephaestusNonGptHook(ctx, options) {
|
|
|
108036
108044
|
if (allowNonGptModel) {
|
|
108037
108045
|
return;
|
|
108038
108046
|
}
|
|
108039
|
-
|
|
108040
|
-
|
|
108041
|
-
|
|
108042
|
-
|
|
108043
|
-
|
|
108047
|
+
const error = new HephaestusRequiresGptError(modelID);
|
|
108048
|
+
log2("[no-hephaestus-non-gpt] Refusing non-GPT Hephaestus primary", {
|
|
108049
|
+
sessionID: input.sessionID,
|
|
108050
|
+
modelID,
|
|
108051
|
+
error: error.message
|
|
108052
|
+
});
|
|
108053
|
+
throw error;
|
|
108044
108054
|
}
|
|
108045
108055
|
}
|
|
108046
108056
|
};
|
|
@@ -166432,6 +166442,33 @@ function createAgentConfigCacheKey(config) {
|
|
|
166432
166442
|
skills: config.skills
|
|
166433
166443
|
});
|
|
166434
166444
|
}
|
|
166445
|
+
function attachHiddenConfigKeyAliases(config, pluginConfig) {
|
|
166446
|
+
const agents = config.agent;
|
|
166447
|
+
if (typeof agents !== "object" || agents === null) {
|
|
166448
|
+
return;
|
|
166449
|
+
}
|
|
166450
|
+
const agentMap = agents;
|
|
166451
|
+
const overrides = pluginConfig.agents;
|
|
166452
|
+
const configKeys = new Set([
|
|
166453
|
+
...Object.keys(AGENT_DISPLAY_NAMES),
|
|
166454
|
+
...Object.keys(overrides ?? {})
|
|
166455
|
+
]);
|
|
166456
|
+
for (const configKey of configKeys) {
|
|
166457
|
+
const displayName = getAgentListDisplayName(configKey, overrides);
|
|
166458
|
+
if (!displayName || displayName === configKey) {
|
|
166459
|
+
continue;
|
|
166460
|
+
}
|
|
166461
|
+
const displayEntry = agentMap[displayName];
|
|
166462
|
+
if (typeof displayEntry !== "object" || displayEntry === null) {
|
|
166463
|
+
continue;
|
|
166464
|
+
}
|
|
166465
|
+
agentMap[configKey] = {
|
|
166466
|
+
...displayEntry,
|
|
166467
|
+
hidden: true
|
|
166468
|
+
};
|
|
166469
|
+
registerAgentName(configKey);
|
|
166470
|
+
}
|
|
166471
|
+
}
|
|
166435
166472
|
function replayAgentConfigSideEffects(params) {
|
|
166436
166473
|
if (params.configuredDefaultAgent && typeof params.defaultAgent === "string") {
|
|
166437
166474
|
setDefaultAgentForSort(params.defaultAgent);
|
|
@@ -166486,6 +166523,7 @@ function createConfigHandler(deps) {
|
|
|
166486
166523
|
};
|
|
166487
166524
|
}
|
|
166488
166525
|
applyToolConfig({ config, pluginConfig, agentResult });
|
|
166526
|
+
attachHiddenConfigKeyAliases(config, pluginConfig);
|
|
166489
166527
|
await applyMcpConfig({ config, pluginConfig, ctx, pluginComponents });
|
|
166490
166528
|
await applyCommandConfig({ config, pluginConfig, ctx, pluginComponents });
|
|
166491
166529
|
if (runtimeSkillSourceUrl) {
|
|
@@ -173965,11 +174003,20 @@ function handleGoalMessage(args) {
|
|
|
173965
174003
|
if (!hooks.goal || nativeGoalCommand) {
|
|
173966
174004
|
return;
|
|
173967
174005
|
}
|
|
173968
|
-
const promptText = extractPromptText5(output.parts);
|
|
174006
|
+
const promptText = args.originalPromptText ?? extractPromptText5(output.parts);
|
|
173969
174007
|
if (promptText.includes(AUTO_SLASH_COMMAND_TAG_OPEN)) {
|
|
173970
174008
|
return;
|
|
173971
174009
|
}
|
|
173972
|
-
const
|
|
174010
|
+
const goalCommand = promptText.trim().match(/^\/goal(?:\s+([\s\S]*))?$/i);
|
|
174011
|
+
if (!goalCommand) {
|
|
174012
|
+
const objective = promptText.trim();
|
|
174013
|
+
if (isFirstMessage && pluginConfig.default_mode?.goal && objective.length > 0 && objective.length <= MAX_OBJECTIVE_LENGTH) {
|
|
174014
|
+
hooks.goal.setGoal(input.sessionID, objective);
|
|
174015
|
+
log2("[chat-message] Default goal auto-started", { sessionID: input.sessionID, objective });
|
|
174016
|
+
}
|
|
174017
|
+
return;
|
|
174018
|
+
}
|
|
174019
|
+
const parsed = parseGoalCommand(goalCommand[1] ?? "");
|
|
173973
174020
|
switch (parsed.kind) {
|
|
173974
174021
|
case "setObjective":
|
|
173975
174022
|
hooks.goal.setGoal(input.sessionID, parsed.objective);
|
|
@@ -173993,13 +174040,6 @@ function handleGoalMessage(args) {
|
|
|
173993
174040
|
default:
|
|
173994
174041
|
break;
|
|
173995
174042
|
}
|
|
173996
|
-
if (parsed.kind === "show" && isFirstMessage && pluginConfig.default_mode?.goal) {
|
|
173997
|
-
const objective = promptText.trim();
|
|
173998
|
-
if (objective.length > 0) {
|
|
173999
|
-
hooks.goal.setGoal(input.sessionID, objective);
|
|
174000
|
-
log2("[chat-message] Default goal auto-started", { sessionID: input.sessionID, objective });
|
|
174001
|
-
}
|
|
174002
|
-
}
|
|
174003
174043
|
}
|
|
174004
174044
|
|
|
174005
174045
|
// packages/omo-opencode/src/plugin/chat-message/model-cache-warning.ts
|
|
@@ -174224,6 +174264,7 @@ function createChatMessageHandler3(args) {
|
|
|
174224
174264
|
if (input.agent) {
|
|
174225
174265
|
updateSessionAgent(input.sessionID, input.agent);
|
|
174226
174266
|
}
|
|
174267
|
+
const originalPromptText = extractPromptText5(output.parts);
|
|
174227
174268
|
const slashCommand = detectSlashCommand(extractPromptText3(output.parts));
|
|
174228
174269
|
if (slashCommand?.command === "stop-continuation") {
|
|
174229
174270
|
stopContinuation({
|
|
@@ -174254,7 +174295,8 @@ function createChatMessageHandler3(args) {
|
|
|
174254
174295
|
output,
|
|
174255
174296
|
isFirstMessage,
|
|
174256
174297
|
pluginConfig,
|
|
174257
|
-
nativeGoalCommand
|
|
174298
|
+
nativeGoalCommand,
|
|
174299
|
+
originalPromptText
|
|
174258
174300
|
});
|
|
174259
174301
|
await applyUltraworkModelOverrideOnMessage(pluginConfig, input.agent, output, pluginContext.client.tui, input.sessionID, pluginContext.client);
|
|
174260
174302
|
};
|
|
@@ -53,7 +53,7 @@ Do ALL of this immediately after the plan is selected, BEFORE the first implemen
|
|
|
53
53
|
|
|
54
54
|
1. **Set the goal, in detail.** When a goal tool is available (`create_goal`), call it with a DETAILED objective: the plan name and path, the concrete end state, the phase and task counts, the delivery mode (direct, `--make-pr`, or `--ship`), and how completion will be verified. One work session = one registered goal (the goal tool holds one active goal); each phase then carries its own concrete goal — the ledger entry Phase 2 records before the wave's first dispatch, defined from the previous phase's landed and verified evidence. No goal tool -> record the same objective as the first ledger entry.
|
|
55
55
|
2. **Register every phase and task as todos.** Mirror the plan into the todo/plan tool of your harness: one phase per plan wave, one todo per column-zero checkbox (including the final verification wave). Register ALL of them up front - never keep tasks in memory only.
|
|
56
|
-
3. **Keep them current at every moment.** Mark a todo in_progress when its work dispatches and done immediately after its verification passes. Never batch-complete at the end, never execute work that is not a registered todo; discovered work — a
|
|
56
|
+
3. **Keep them current at every moment.** Mark a todo in_progress when its work dispatches and done immediately after its verification passes. Never batch-complete at the end, never execute work that is not a registered todo; discovered work inside the change's blast radius — the request not delivered, a regression this change introduces, an invalid proof, a failing test or stale doc of touched code — is appended to the plan as a checkbox, mirrored as a todo before it runs, and fixed to the ideal state; a defect outside it gets a tracked issue with reproduction and evidence and a line in the final report. A worker that meets a defect outside its assigned files reports it instead of fixing it; only the orchestrator appends the checkbox and dispatches it to a correctly scoped unit. The todo list, Boulder state, and plan checkboxes must always tell the same story.
|
|
57
57
|
|
|
58
58
|
## Phase 1: Select the plan
|
|
59
59
|
|
package/dist/tui.js
CHANGED
|
@@ -74617,7 +74617,7 @@ init_shared();
|
|
|
74617
74617
|
// package.json
|
|
74618
74618
|
var package_default = {
|
|
74619
74619
|
name: "oh-my-opencode",
|
|
74620
|
-
version: "5.1.
|
|
74620
|
+
version: "5.1.7",
|
|
74621
74621
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
74622
74622
|
main: "./dist/index.js",
|
|
74623
74623
|
types: "dist/index.d.ts",
|
|
@@ -74794,7 +74794,7 @@ var package_default = {
|
|
|
74794
74794
|
},
|
|
74795
74795
|
devDependencies: {
|
|
74796
74796
|
"@clack/prompts": "^1.8.1",
|
|
74797
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
74797
|
+
"@code-yeongyu/senpi": "2026.9.30",
|
|
74798
74798
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
74799
74799
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
74800
74800
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -74852,18 +74852,18 @@ var package_default = {
|
|
|
74852
74852
|
typescript: "^7.0.2"
|
|
74853
74853
|
},
|
|
74854
74854
|
optionalDependencies: {
|
|
74855
|
-
"oh-my-opencode-darwin-arm64": "5.1.
|
|
74856
|
-
"oh-my-opencode-darwin-x64": "5.1.
|
|
74857
|
-
"oh-my-opencode-darwin-x64-baseline": "5.1.
|
|
74858
|
-
"oh-my-opencode-linux-arm64": "5.1.
|
|
74859
|
-
"oh-my-opencode-linux-arm64-musl": "5.1.
|
|
74860
|
-
"oh-my-opencode-linux-x64": "5.1.
|
|
74861
|
-
"oh-my-opencode-linux-x64-baseline": "5.1.
|
|
74862
|
-
"oh-my-opencode-linux-x64-musl": "5.1.
|
|
74863
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.1.
|
|
74864
|
-
"oh-my-opencode-windows-arm64": "5.1.
|
|
74865
|
-
"oh-my-opencode-windows-x64": "5.1.
|
|
74866
|
-
"oh-my-opencode-windows-x64-baseline": "5.1.
|
|
74855
|
+
"oh-my-opencode-darwin-arm64": "5.1.7",
|
|
74856
|
+
"oh-my-opencode-darwin-x64": "5.1.7",
|
|
74857
|
+
"oh-my-opencode-darwin-x64-baseline": "5.1.7",
|
|
74858
|
+
"oh-my-opencode-linux-arm64": "5.1.7",
|
|
74859
|
+
"oh-my-opencode-linux-arm64-musl": "5.1.7",
|
|
74860
|
+
"oh-my-opencode-linux-x64": "5.1.7",
|
|
74861
|
+
"oh-my-opencode-linux-x64-baseline": "5.1.7",
|
|
74862
|
+
"oh-my-opencode-linux-x64-musl": "5.1.7",
|
|
74863
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.1.7",
|
|
74864
|
+
"oh-my-opencode-windows-arm64": "5.1.7",
|
|
74865
|
+
"oh-my-opencode-windows-x64": "5.1.7",
|
|
74866
|
+
"oh-my-opencode-windows-x64-baseline": "5.1.7"
|
|
74867
74867
|
},
|
|
74868
74868
|
overrides: {
|
|
74869
74869
|
hono: "^4.13.8",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-openagent",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.7",
|
|
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",
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
},
|
|
178
178
|
"devDependencies": {
|
|
179
179
|
"@clack/prompts": "^1.8.1",
|
|
180
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
180
|
+
"@code-yeongyu/senpi": "2026.9.30",
|
|
181
181
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
182
182
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
183
183
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
@@ -235,18 +235,18 @@
|
|
|
235
235
|
"typescript": "^7.0.2"
|
|
236
236
|
},
|
|
237
237
|
"optionalDependencies": {
|
|
238
|
-
"oh-my-openagent-darwin-arm64": "5.1.
|
|
239
|
-
"oh-my-openagent-darwin-x64": "5.1.
|
|
240
|
-
"oh-my-openagent-darwin-x64-baseline": "5.1.
|
|
241
|
-
"oh-my-openagent-linux-arm64": "5.1.
|
|
242
|
-
"oh-my-openagent-linux-arm64-musl": "5.1.
|
|
243
|
-
"oh-my-openagent-linux-x64": "5.1.
|
|
244
|
-
"oh-my-openagent-linux-x64-baseline": "5.1.
|
|
245
|
-
"oh-my-openagent-linux-x64-musl": "5.1.
|
|
246
|
-
"oh-my-openagent-linux-x64-musl-baseline": "5.1.
|
|
247
|
-
"oh-my-openagent-windows-arm64": "5.1.
|
|
248
|
-
"oh-my-openagent-windows-x64": "5.1.
|
|
249
|
-
"oh-my-openagent-windows-x64-baseline": "5.1.
|
|
238
|
+
"oh-my-openagent-darwin-arm64": "5.1.7",
|
|
239
|
+
"oh-my-openagent-darwin-x64": "5.1.7",
|
|
240
|
+
"oh-my-openagent-darwin-x64-baseline": "5.1.7",
|
|
241
|
+
"oh-my-openagent-linux-arm64": "5.1.7",
|
|
242
|
+
"oh-my-openagent-linux-arm64-musl": "5.1.7",
|
|
243
|
+
"oh-my-openagent-linux-x64": "5.1.7",
|
|
244
|
+
"oh-my-openagent-linux-x64-baseline": "5.1.7",
|
|
245
|
+
"oh-my-openagent-linux-x64-musl": "5.1.7",
|
|
246
|
+
"oh-my-openagent-linux-x64-musl-baseline": "5.1.7",
|
|
247
|
+
"oh-my-openagent-windows-arm64": "5.1.7",
|
|
248
|
+
"oh-my-openagent-windows-x64": "5.1.7",
|
|
249
|
+
"oh-my-openagent-windows-x64-baseline": "5.1.7"
|
|
250
250
|
},
|
|
251
251
|
"overrides": {
|
|
252
252
|
"hono": "^4.13.8",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { tmpdir } from "node:os";
|
|
1
|
+
import { homedir, tmpdir } from "node:os";
|
|
2
2
|
import { dirname, resolve } from "node:path";
|
|
3
3
|
|
|
4
4
|
import { nearestMarkedAncestor } from "../lsp/outside-context-workspace.js";
|
|
@@ -11,6 +11,8 @@ export interface PostEditFileLocationOptions {
|
|
|
11
11
|
readonly agentDirs: readonly string[];
|
|
12
12
|
/** Temp roots; defaults to the canonical OS temp dir (plus `/tmp` off Windows). */
|
|
13
13
|
readonly tempDirs?: readonly string[];
|
|
14
|
+
/** Home dirs that never count as a project root themselves; defaults to the OS home dir. */
|
|
15
|
+
readonly homeDirs?: readonly string[];
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
/**
|
|
@@ -19,6 +21,8 @@ export interface PostEditFileLocationOptions {
|
|
|
19
21
|
* A project root is the nearest ancestor carrying one of lsp-core's `WORKSPACE_MARKERS` (the marker set the
|
|
20
22
|
* out-of-cwd workspace resolver uses). Inside a temp dir, only a marked root strictly below the temp root
|
|
21
23
|
* counts, so a stray `package.json` left in the temp root does not turn every scratch file into a project.
|
|
24
|
+
* The home dir is never a project root either: a dotfiles `.git` or stray `~/package.json` there does not make
|
|
25
|
+
* every home-level file a project, while a marked project below home still is one.
|
|
22
26
|
* Paths are canonicalized first because macOS `/tmp` and `/var` are symlinks.
|
|
23
27
|
*/
|
|
24
28
|
export function classifyPostEditFileLocation(
|
|
@@ -38,7 +42,8 @@ export function classifyPostEditFileLocation(
|
|
|
38
42
|
const ownProject = projectRoot !== undefined && projectRoot !== tempRoot && isPathInside(tempRoot, projectRoot);
|
|
39
43
|
return ownProject ? "project" : "temp";
|
|
40
44
|
}
|
|
41
|
-
|
|
45
|
+
if (projectRoot === undefined) return "outside_project";
|
|
46
|
+
return canonicalDirectories(options.homeDirs ?? [homedir()]).includes(projectRoot) ? "outside_project" : "project";
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
function defaultTempDirectories(): readonly string[] {
|