evil-omo 3.17.5 → 3.17.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.ru.md +1 -1
- package/README.zh-cn.md +1 -1
- package/dist/agents/agent-builder.d.ts +2 -3
- package/dist/agents/agent-skill-resolution.d.ts +7 -0
- package/dist/agents/frontier-tool-schema-guard.d.ts +3 -0
- package/dist/agents/hephaestus/agent.d.ts +1 -1
- package/dist/agents/hephaestus/gpt-5-5.d.ts +12 -0
- package/dist/agents/sisyphus/claude-opus-4-7.d.ts +20 -0
- package/dist/agents/sisyphus/gpt-5-5.d.ts +20 -0
- package/dist/agents/sisyphus/index.d.ts +5 -0
- package/dist/agents/sisyphus/kimi-k2-6.d.ts +32 -0
- package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
- package/dist/agents/sisyphus-junior/gpt-5-5.d.ts +14 -0
- package/dist/agents/sisyphus-junior/index.d.ts +2 -0
- package/dist/agents/sisyphus-junior/kimi-k2-6.d.ts +13 -0
- package/dist/agents/types.d.ts +16 -0
- package/dist/cli/doctor/checks/model-resolution.d.ts +4 -0
- package/dist/cli/index.js +141 -86
- package/dist/features/background-agent/attempt-lifecycle.d.ts +12 -0
- package/dist/features/background-agent/background-task-notification-template.d.ts +2 -1
- package/dist/features/background-agent/constants.d.ts +1 -0
- package/dist/features/background-agent/fallback-retry-handler.d.ts +8 -0
- package/dist/features/background-agent/manager.d.ts +9 -0
- package/dist/features/background-agent/types.d.ts +24 -0
- package/dist/hooks/model-fallback/controller-accessor.d.ts +1 -0
- package/dist/hooks/model-fallback/fallback-state-controller.d.ts +1 -0
- package/dist/hooks/model-fallback/hook.d.ts +2 -1
- package/dist/hooks/preemptive-compaction-degradation-monitor.d.ts +1 -0
- package/dist/hooks/preemptive-compaction-no-text-tail.d.ts +1 -0
- package/dist/hooks/ralph-loop/ralph-loop-event-handler.d.ts +1 -6
- package/dist/hooks/ralph-loop/session-event-handler.d.ts +2 -6
- package/dist/hooks/ralph-loop/types.d.ts +5 -0
- package/dist/index.js +3531 -664
- package/dist/plugin/event.d.ts +1 -0
- package/dist/plugin/hooks/create-core-hooks.d.ts +2 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts +2 -0
- package/dist/shared/agent-display-names.d.ts +7 -2
- package/dist/shared/agent-sort-shim.d.ts +28 -0
- package/dist/shared/dynamic-truncator.d.ts +9 -10
- package/dist/shared/file-reference-resolver.d.ts +1 -0
- package/dist/shared/model-error-classifier.d.ts +2 -2
- package/dist/shared/posthog-activity-state.d.ts +5 -2
- package/dist/shared/posthog.d.ts +5 -0
- package/dist/tools/background-task/clients.d.ts +1 -0
- package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
- package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
- package/dist/tools/delegate-task/constants.d.ts +1 -1
- package/dist/tools/delegate-task/executor-types.d.ts +1 -0
- package/dist/tools/delegate-task/openai-categories.d.ts +3 -0
- package/dist/tools/delegate-task/sync-task-fallback.d.ts +3 -0
- package/dist/tools/slashcommand/command-discovery-deps.d.ts +6 -0
- package/package.json +12 -12
- package/dist/hooks/ralph-loop/loop-session-recovery.d.ts +0 -7
package/dist/cli/index.js
CHANGED
|
@@ -6018,8 +6018,10 @@ function normalizeSDKResponse(response, fallback, options) {
|
|
|
6018
6018
|
}
|
|
6019
6019
|
|
|
6020
6020
|
// src/shared/dynamic-truncator.ts
|
|
6021
|
+
var usageCacheByClient;
|
|
6021
6022
|
var init_dynamic_truncator = __esm(() => {
|
|
6022
6023
|
init_context_limit_resolver();
|
|
6024
|
+
usageCacheByClient = new WeakMap;
|
|
6023
6025
|
});
|
|
6024
6026
|
|
|
6025
6027
|
// src/shared/data-path.ts
|
|
@@ -6205,7 +6207,8 @@ var init_model_versions = __esm(() => {
|
|
|
6205
6207
|
"anthropic/claude-opus-4-5": "anthropic/claude-opus-4-7",
|
|
6206
6208
|
"anthropic/claude-opus-4-6": "anthropic/claude-opus-4-7",
|
|
6207
6209
|
"anthropic/claude-sonnet-4-5": "anthropic/claude-sonnet-4-6",
|
|
6208
|
-
"openai/gpt-5.3-codex": "openai/gpt-5.4"
|
|
6210
|
+
"openai/gpt-5.3-codex": "openai/gpt-5.4",
|
|
6211
|
+
"openai/gpt-5.4": "openai/gpt-5.5"
|
|
6209
6212
|
};
|
|
6210
6213
|
});
|
|
6211
6214
|
|
|
@@ -6290,12 +6293,15 @@ function migrateConfigFile(configPath, rawConfig) {
|
|
|
6290
6293
|
const copy = JSON.parse(JSON.stringify(rawConfig));
|
|
6291
6294
|
let needsWrite = false;
|
|
6292
6295
|
const sidecarMigrations = readAppliedMigrations(configPath);
|
|
6293
|
-
const inConfigMigrations = Array.isArray(copy._migrations) ? new Set(copy._migrations) : new Set;
|
|
6296
|
+
const inConfigMigrations = Array.isArray(copy._migrations) ? new Set(copy._migrations.filter((migration) => typeof migration === "string")) : new Set;
|
|
6297
|
+
const inlineAppliedMigrations = Array.isArray(copy.appliedMigrations) ? new Set(copy.appliedMigrations.filter((migration) => typeof migration === "string")) : new Set;
|
|
6294
6298
|
const existingMigrations = new Set([
|
|
6295
6299
|
...sidecarMigrations,
|
|
6296
|
-
...inConfigMigrations
|
|
6300
|
+
...inConfigMigrations,
|
|
6301
|
+
...inlineAppliedMigrations
|
|
6297
6302
|
]);
|
|
6298
6303
|
const hadLegacyInConfigMigrations = inConfigMigrations.size > 0;
|
|
6304
|
+
const hadInlineAppliedMigrations = inlineAppliedMigrations.size > 0;
|
|
6299
6305
|
const allNewMigrations = [];
|
|
6300
6306
|
if (copy.agents && typeof copy.agents === "object") {
|
|
6301
6307
|
const { migrated, changed } = migrateAgentNames(copy.agents);
|
|
@@ -6327,11 +6333,12 @@ function migrateConfigFile(configPath, rawConfig) {
|
|
|
6327
6333
|
...existingMigrations,
|
|
6328
6334
|
...newMigrationsToRecord
|
|
6329
6335
|
]);
|
|
6330
|
-
const shouldWriteSidecar = newMigrationsToRecord.length > 0 || hadLegacyInConfigMigrations;
|
|
6336
|
+
const shouldWriteSidecar = newMigrationsToRecord.length > 0 || hadLegacyInConfigMigrations || hadInlineAppliedMigrations;
|
|
6331
6337
|
if (newMigrationsToRecord.length > 0) {
|
|
6332
6338
|
needsWrite = true;
|
|
6333
6339
|
}
|
|
6334
|
-
if (hadLegacyInConfigMigrations) {
|
|
6340
|
+
if (hadLegacyInConfigMigrations || hadInlineAppliedMigrations) {
|
|
6341
|
+
delete copy.appliedMigrations;
|
|
6335
6342
|
needsWrite = true;
|
|
6336
6343
|
}
|
|
6337
6344
|
if (shouldWriteSidecar) {
|
|
@@ -6695,11 +6702,6 @@ function stripInvisibleAgentCharacters(agentName) {
|
|
|
6695
6702
|
function stripAgentListSortPrefix(agentName) {
|
|
6696
6703
|
return stripInvisibleAgentCharacters(agentName);
|
|
6697
6704
|
}
|
|
6698
|
-
function getAgentRuntimeName(configKey) {
|
|
6699
|
-
const displayName = getAgentDisplayName(configKey);
|
|
6700
|
-
const prefix = AGENT_LIST_SORT_PREFIXES[configKey.toLowerCase()];
|
|
6701
|
-
return prefix ? `${prefix}${displayName}` : displayName;
|
|
6702
|
-
}
|
|
6703
6705
|
function getAgentDisplayName(configKey) {
|
|
6704
6706
|
const exactMatch = AGENT_DISPLAY_NAMES[configKey];
|
|
6705
6707
|
if (exactMatch !== undefined)
|
|
@@ -6727,7 +6729,7 @@ function getAgentConfigKey(agentName) {
|
|
|
6727
6729
|
const lower = stripAgentListSortPrefix(agentName).trim().toLowerCase();
|
|
6728
6730
|
return resolveKnownAgentConfigKey(agentName) ?? lower;
|
|
6729
6731
|
}
|
|
6730
|
-
var AGENT_DISPLAY_NAMES,
|
|
6732
|
+
var AGENT_DISPLAY_NAMES, INVISIBLE_AGENT_CHARACTERS_REGEX, REVERSE_DISPLAY_NAMES, LEGACY_DISPLAY_NAMES;
|
|
6731
6733
|
var init_agent_display_names = __esm(() => {
|
|
6732
6734
|
AGENT_DISPLAY_NAMES = {
|
|
6733
6735
|
sisyphus: "Sisyphus - Ultraworker",
|
|
@@ -6745,12 +6747,6 @@ var init_agent_display_names = __esm(() => {
|
|
|
6745
6747
|
"multimodal-looker": "multimodal-looker",
|
|
6746
6748
|
"council-member": "council-member"
|
|
6747
6749
|
};
|
|
6748
|
-
AGENT_LIST_SORT_PREFIXES = {
|
|
6749
|
-
sisyphus: "\u200B",
|
|
6750
|
-
hephaestus: "\u200B\u200B",
|
|
6751
|
-
prometheus: "\u200B\u200B\u200B",
|
|
6752
|
-
atlas: "\u200B\u200B\u200B\u200B"
|
|
6753
|
-
};
|
|
6754
6750
|
INVISIBLE_AGENT_CHARACTERS_REGEX = /[\u200B\u200C\u200D\uFEFF]/g;
|
|
6755
6751
|
REVERSE_DISPLAY_NAMES = Object.fromEntries(Object.entries(AGENT_DISPLAY_NAMES).map(([key, displayName]) => [displayName.toLowerCase(), key]));
|
|
6756
6752
|
LEGACY_DISPLAY_NAMES = {
|
|
@@ -6790,7 +6786,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6790
6786
|
],
|
|
6791
6787
|
model: "kimi-k2.5"
|
|
6792
6788
|
},
|
|
6793
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
6789
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.5", variant: "medium" },
|
|
6794
6790
|
{ providers: ["zai-coding-plan", "opencode", "vercel"], model: "glm-5" },
|
|
6795
6791
|
{ providers: ["opencode"], model: "big-pickle" }
|
|
6796
6792
|
],
|
|
@@ -6800,7 +6796,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6800
6796
|
fallbackChain: [
|
|
6801
6797
|
{
|
|
6802
6798
|
providers: ["openai", "github-copilot", "venice", "opencode", "vercel"],
|
|
6803
|
-
model: "gpt-5.
|
|
6799
|
+
model: "gpt-5.5",
|
|
6804
6800
|
variant: "medium"
|
|
6805
6801
|
}
|
|
6806
6802
|
],
|
|
@@ -6810,7 +6806,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6810
6806
|
fallbackChain: [
|
|
6811
6807
|
{
|
|
6812
6808
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
6813
|
-
model: "gpt-5.
|
|
6809
|
+
model: "gpt-5.5",
|
|
6814
6810
|
variant: "high"
|
|
6815
6811
|
},
|
|
6816
6812
|
{
|
|
@@ -6846,7 +6842,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6846
6842
|
},
|
|
6847
6843
|
"multimodal-looker": {
|
|
6848
6844
|
fallbackChain: [
|
|
6849
|
-
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.
|
|
6845
|
+
{ providers: ["openai", "opencode", "vercel"], model: "gpt-5.5", variant: "medium" },
|
|
6850
6846
|
{ providers: ["opencode-go", "vercel"], model: "kimi-k2.5" },
|
|
6851
6847
|
{ providers: ["zai-coding-plan", "vercel"], model: "glm-4.6v" },
|
|
6852
6848
|
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5-nano" }
|
|
@@ -6861,7 +6857,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6861
6857
|
},
|
|
6862
6858
|
{
|
|
6863
6859
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
6864
|
-
model: "gpt-5.
|
|
6860
|
+
model: "gpt-5.5",
|
|
6865
6861
|
variant: "high"
|
|
6866
6862
|
},
|
|
6867
6863
|
{ providers: ["opencode-go", "vercel"], model: "glm-5" },
|
|
@@ -6880,7 +6876,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6880
6876
|
},
|
|
6881
6877
|
{
|
|
6882
6878
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
6883
|
-
model: "gpt-5.
|
|
6879
|
+
model: "gpt-5.5",
|
|
6884
6880
|
variant: "high"
|
|
6885
6881
|
},
|
|
6886
6882
|
{ providers: ["opencode-go", "vercel"], model: "glm-5" },
|
|
@@ -6891,7 +6887,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6891
6887
|
fallbackChain: [
|
|
6892
6888
|
{
|
|
6893
6889
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
6894
|
-
model: "gpt-5.
|
|
6890
|
+
model: "gpt-5.5",
|
|
6895
6891
|
variant: "xhigh"
|
|
6896
6892
|
},
|
|
6897
6893
|
{
|
|
@@ -6913,7 +6909,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6913
6909
|
{ providers: ["opencode-go", "vercel"], model: "kimi-k2.5" },
|
|
6914
6910
|
{
|
|
6915
6911
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
6916
|
-
model: "gpt-5.
|
|
6912
|
+
model: "gpt-5.5",
|
|
6917
6913
|
variant: "medium"
|
|
6918
6914
|
},
|
|
6919
6915
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m2.7" }
|
|
@@ -6925,7 +6921,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6925
6921
|
{ providers: ["opencode-go", "vercel"], model: "kimi-k2.5" },
|
|
6926
6922
|
{
|
|
6927
6923
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
6928
|
-
model: "gpt-5.
|
|
6924
|
+
model: "gpt-5.5",
|
|
6929
6925
|
variant: "medium"
|
|
6930
6926
|
},
|
|
6931
6927
|
{ providers: ["opencode-go", "vercel"], model: "minimax-m2.7" },
|
|
@@ -6955,7 +6951,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6955
6951
|
fallbackChain: [
|
|
6956
6952
|
{
|
|
6957
6953
|
providers: ["openai", "opencode", "vercel"],
|
|
6958
|
-
model: "gpt-5.
|
|
6954
|
+
model: "gpt-5.5",
|
|
6959
6955
|
variant: "xhigh"
|
|
6960
6956
|
},
|
|
6961
6957
|
{
|
|
@@ -6975,7 +6971,7 @@ var init_model_requirements = __esm(() => {
|
|
|
6975
6971
|
fallbackChain: [
|
|
6976
6972
|
{
|
|
6977
6973
|
providers: ["openai", "github-copilot", "venice", "opencode", "vercel"],
|
|
6978
|
-
model: "gpt-5.
|
|
6974
|
+
model: "gpt-5.5",
|
|
6979
6975
|
variant: "medium"
|
|
6980
6976
|
},
|
|
6981
6977
|
{
|
|
@@ -7002,7 +6998,7 @@ var init_model_requirements = __esm(() => {
|
|
|
7002
6998
|
model: "claude-opus-4-7",
|
|
7003
6999
|
variant: "max"
|
|
7004
7000
|
},
|
|
7005
|
-
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.
|
|
7001
|
+
{ providers: ["openai", "github-copilot", "opencode", "vercel"], model: "gpt-5.5" }
|
|
7006
7002
|
],
|
|
7007
7003
|
requiresModel: "gemini-3.1-pro"
|
|
7008
7004
|
},
|
|
@@ -7052,7 +7048,7 @@ var init_model_requirements = __esm(() => {
|
|
|
7052
7048
|
},
|
|
7053
7049
|
{
|
|
7054
7050
|
providers: ["openai", "github-copilot", "opencode", "vercel"],
|
|
7055
|
-
model: "gpt-5.
|
|
7051
|
+
model: "gpt-5.5",
|
|
7056
7052
|
variant: "high"
|
|
7057
7053
|
},
|
|
7058
7054
|
{ providers: ["zai-coding-plan", "opencode", "vercel"], model: "glm-5" },
|
|
@@ -49894,6 +49890,22 @@ var init_supplemental_entries = __esm(() => {
|
|
|
49894
49890
|
input: 272000,
|
|
49895
49891
|
output: 128000
|
|
49896
49892
|
}
|
|
49893
|
+
},
|
|
49894
|
+
"gpt-5.5": {
|
|
49895
|
+
id: "gpt-5.5",
|
|
49896
|
+
family: "gpt",
|
|
49897
|
+
reasoning: true,
|
|
49898
|
+
temperature: false,
|
|
49899
|
+
toolCall: true,
|
|
49900
|
+
modalities: {
|
|
49901
|
+
input: ["text", "image", "pdf"],
|
|
49902
|
+
output: ["text"]
|
|
49903
|
+
},
|
|
49904
|
+
limit: {
|
|
49905
|
+
context: 400000,
|
|
49906
|
+
input: 272000,
|
|
49907
|
+
output: 128000
|
|
49908
|
+
}
|
|
49897
49909
|
}
|
|
49898
49910
|
};
|
|
49899
49911
|
});
|
|
@@ -49973,6 +49985,18 @@ var init_model_capability_aliases = __esm(() => {
|
|
|
49973
49985
|
ruleID: "gemini-3-pro-tier-alias",
|
|
49974
49986
|
canonicalModelID: "gemini-3-pro-preview",
|
|
49975
49987
|
rationale: "Legacy Gemini 3 tier suffixes still need to land on the canonical preview model."
|
|
49988
|
+
},
|
|
49989
|
+
{
|
|
49990
|
+
aliasModelID: "k2pb",
|
|
49991
|
+
ruleID: "kimi-k2pb-alias",
|
|
49992
|
+
canonicalModelID: "k2p5",
|
|
49993
|
+
rationale: "Kimi for Coding exposes k2pb while the bundled capabilities snapshot uses the canonical k2p5 ID."
|
|
49994
|
+
},
|
|
49995
|
+
{
|
|
49996
|
+
aliasModelID: "claude-opus-4.7",
|
|
49997
|
+
ruleID: "claude-opus-dotted-version-alias",
|
|
49998
|
+
canonicalModelID: "claude-opus-4-7",
|
|
49999
|
+
rationale: "GitHub Copilot exposes Claude Opus 4.7 with dotted version syntax while the snapshot uses dashed syntax."
|
|
49976
50000
|
}
|
|
49977
50001
|
];
|
|
49978
50002
|
EXACT_ALIAS_RULES_BY_MODEL = new Map(EXACT_ALIAS_RULES.map((rule) => [rule.aliasModelID, rule]));
|
|
@@ -50042,10 +50066,18 @@ var init_model_capability_heuristics = __esm(() => {
|
|
|
50042
50066
|
includes: ["gemini"],
|
|
50043
50067
|
variants: ["low", "medium", "high"]
|
|
50044
50068
|
},
|
|
50069
|
+
{
|
|
50070
|
+
family: "kimi-thinking",
|
|
50071
|
+
includes: ["kimi-thinking", "k2-thinking", "k2-think"],
|
|
50072
|
+
pattern: /(?:kimi|k2).*-(?:thinking|think)/,
|
|
50073
|
+
variants: ["low", "medium", "high"],
|
|
50074
|
+
supportsThinking: true
|
|
50075
|
+
},
|
|
50045
50076
|
{
|
|
50046
50077
|
family: "kimi",
|
|
50047
50078
|
includes: ["kimi", "k2"],
|
|
50048
|
-
variants: ["low", "medium", "high"]
|
|
50079
|
+
variants: ["low", "medium", "high"],
|
|
50080
|
+
supportsThinking: false
|
|
50049
50081
|
},
|
|
50050
50082
|
{
|
|
50051
50083
|
family: "glm",
|
|
@@ -50055,7 +50087,8 @@ var init_model_capability_heuristics = __esm(() => {
|
|
|
50055
50087
|
{
|
|
50056
50088
|
family: "minimax",
|
|
50057
50089
|
includes: ["minimax"],
|
|
50058
|
-
variants: ["low", "medium", "high"]
|
|
50090
|
+
variants: ["low", "medium", "high"],
|
|
50091
|
+
supportsThinking: false
|
|
50059
50092
|
},
|
|
50060
50093
|
{
|
|
50061
50094
|
family: "deepseek",
|
|
@@ -51522,10 +51555,10 @@ var init_openai_only_model_catalog = __esm(() => {
|
|
|
51522
51555
|
librarian: { model: "openai/gpt-5.4-mini-fast" }
|
|
51523
51556
|
};
|
|
51524
51557
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
51525
|
-
artistry: { model: "openai/gpt-5.
|
|
51558
|
+
artistry: { model: "openai/gpt-5.5", variant: "xhigh" },
|
|
51526
51559
|
quick: { model: "openai/gpt-5.4-mini" },
|
|
51527
|
-
"visual-engineering": { model: "openai/gpt-5.
|
|
51528
|
-
writing: { model: "openai/gpt-5.
|
|
51560
|
+
"visual-engineering": { model: "openai/gpt-5.5", variant: "high" },
|
|
51561
|
+
writing: { model: "openai/gpt-5.5", variant: "medium" }
|
|
51529
51562
|
};
|
|
51530
51563
|
});
|
|
51531
51564
|
|
|
@@ -51848,6 +51881,30 @@ function archiveLegacyConfigFile(legacyPath) {
|
|
|
51848
51881
|
}
|
|
51849
51882
|
}
|
|
51850
51883
|
}
|
|
51884
|
+
function migrateLegacySidecarFile(legacyPath, canonicalPath) {
|
|
51885
|
+
const legacySidecarPath = getSidecarPath(legacyPath);
|
|
51886
|
+
if (!existsSync14(legacySidecarPath))
|
|
51887
|
+
return true;
|
|
51888
|
+
const canonicalSidecarPath = getSidecarPath(canonicalPath);
|
|
51889
|
+
if (existsSync14(canonicalSidecarPath))
|
|
51890
|
+
return true;
|
|
51891
|
+
try {
|
|
51892
|
+
const content = readFileSync9(legacySidecarPath, "utf-8");
|
|
51893
|
+
writeFileAtomically(canonicalSidecarPath, content);
|
|
51894
|
+
log("[migrateLegacyConfigFile] Migrated legacy migration sidecar to canonical path", {
|
|
51895
|
+
from: legacySidecarPath,
|
|
51896
|
+
to: canonicalSidecarPath
|
|
51897
|
+
});
|
|
51898
|
+
return true;
|
|
51899
|
+
} catch (error) {
|
|
51900
|
+
log("[migrateLegacyConfigFile] Failed to migrate legacy migration sidecar", {
|
|
51901
|
+
legacySidecarPath,
|
|
51902
|
+
canonicalSidecarPath,
|
|
51903
|
+
error
|
|
51904
|
+
});
|
|
51905
|
+
return false;
|
|
51906
|
+
}
|
|
51907
|
+
}
|
|
51851
51908
|
function migrateLegacyConfigFile(legacyPath) {
|
|
51852
51909
|
if (!existsSync14(legacyPath))
|
|
51853
51910
|
return false;
|
|
@@ -51859,10 +51916,12 @@ function migrateLegacyConfigFile(legacyPath) {
|
|
|
51859
51916
|
try {
|
|
51860
51917
|
const content = readFileSync9(legacyPath, "utf-8");
|
|
51861
51918
|
writeFileAtomically(canonicalPath, content);
|
|
51919
|
+
const migratedSidecar = migrateLegacySidecarFile(legacyPath, canonicalPath);
|
|
51862
51920
|
const archivedLegacyConfig = archiveLegacyConfigFile(legacyPath);
|
|
51863
51921
|
log("[migrateLegacyConfigFile] Migrated legacy config to canonical path", {
|
|
51864
51922
|
from: legacyPath,
|
|
51865
51923
|
to: canonicalPath,
|
|
51924
|
+
migratedSidecar,
|
|
51866
51925
|
archivedLegacyConfig
|
|
51867
51926
|
});
|
|
51868
51927
|
return true;
|
|
@@ -51873,6 +51932,7 @@ function migrateLegacyConfigFile(legacyPath) {
|
|
|
51873
51932
|
}
|
|
51874
51933
|
var init_migrate_legacy_config_file = __esm(() => {
|
|
51875
51934
|
init_logger();
|
|
51935
|
+
init_migrations_sidecar();
|
|
51876
51936
|
init_plugin_identity();
|
|
51877
51937
|
init_write_file_atomically();
|
|
51878
51938
|
});
|
|
@@ -53000,13 +53060,6 @@ function readPackageVersion(packageJsonPath) {
|
|
|
53000
53060
|
return pkg.version ?? null;
|
|
53001
53061
|
}
|
|
53002
53062
|
function getCachedVersion() {
|
|
53003
|
-
for (const candidate of INSTALLED_PACKAGE_JSON_CANDIDATES) {
|
|
53004
|
-
try {
|
|
53005
|
-
if (fs9.existsSync(candidate)) {
|
|
53006
|
-
return readPackageVersion(candidate);
|
|
53007
|
-
}
|
|
53008
|
-
} catch {}
|
|
53009
|
-
}
|
|
53010
53063
|
try {
|
|
53011
53064
|
const currentDir = path9.dirname(fileURLToPath2(import.meta.url));
|
|
53012
53065
|
const pkgPath = findPackageJsonUp(currentDir);
|
|
@@ -53016,6 +53069,13 @@ function getCachedVersion() {
|
|
|
53016
53069
|
} catch (err) {
|
|
53017
53070
|
log("[auto-update-checker] Failed to resolve version from current directory:", err);
|
|
53018
53071
|
}
|
|
53072
|
+
for (const candidate of INSTALLED_PACKAGE_JSON_CANDIDATES) {
|
|
53073
|
+
try {
|
|
53074
|
+
if (fs9.existsSync(candidate)) {
|
|
53075
|
+
return readPackageVersion(candidate);
|
|
53076
|
+
}
|
|
53077
|
+
} catch {}
|
|
53078
|
+
}
|
|
53019
53079
|
try {
|
|
53020
53080
|
const execDir = path9.dirname(fs9.realpathSync(process.execPath));
|
|
53021
53081
|
const pkgPath = findPackageJsonUp(execDir);
|
|
@@ -53800,7 +53860,7 @@ var {
|
|
|
53800
53860
|
// package.json
|
|
53801
53861
|
var package_default = {
|
|
53802
53862
|
name: "evil-omo",
|
|
53803
|
-
version: "3.17.
|
|
53863
|
+
version: "3.17.10",
|
|
53804
53864
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
53805
53865
|
main: "./dist/index.js",
|
|
53806
53866
|
types: "dist/index.d.ts",
|
|
@@ -53879,17 +53939,17 @@ var package_default = {
|
|
|
53879
53939
|
zod: "^4.3.0"
|
|
53880
53940
|
},
|
|
53881
53941
|
optionalDependencies: {
|
|
53882
|
-
"evil-omo-darwin-arm64": "3.17.
|
|
53883
|
-
"evil-omo-darwin-x64": "3.17.
|
|
53884
|
-
"evil-omo-darwin-x64-baseline": "3.17.
|
|
53885
|
-
"evil-omo-linux-x64": "3.17.
|
|
53886
|
-
"evil-omo-linux-x64-baseline": "3.17.
|
|
53887
|
-
"evil-omo-linux-arm64": "3.17.
|
|
53888
|
-
"evil-omo-linux-x64-musl": "3.17.
|
|
53889
|
-
"evil-omo-linux-x64-musl-baseline": "3.17.
|
|
53890
|
-
"evil-omo-linux-arm64-musl": "3.17.
|
|
53891
|
-
"evil-omo-windows-x64": "3.17.
|
|
53892
|
-
"evil-omo-windows-x64-baseline": "3.17.
|
|
53942
|
+
"evil-omo-darwin-arm64": "3.17.10",
|
|
53943
|
+
"evil-omo-darwin-x64": "3.17.10",
|
|
53944
|
+
"evil-omo-darwin-x64-baseline": "3.17.10",
|
|
53945
|
+
"evil-omo-linux-x64": "3.17.10",
|
|
53946
|
+
"evil-omo-linux-x64-baseline": "3.17.10",
|
|
53947
|
+
"evil-omo-linux-arm64": "3.17.10",
|
|
53948
|
+
"evil-omo-linux-x64-musl": "3.17.10",
|
|
53949
|
+
"evil-omo-linux-x64-musl-baseline": "3.17.10",
|
|
53950
|
+
"evil-omo-linux-arm64-musl": "3.17.10",
|
|
53951
|
+
"evil-omo-windows-x64": "3.17.10",
|
|
53952
|
+
"evil-omo-windows-x64-baseline": "3.17.10"
|
|
53893
53953
|
},
|
|
53894
53954
|
overrides: {},
|
|
53895
53955
|
trustedDependencies: [
|
|
@@ -58569,9 +58629,6 @@ function getPostHogActivityStateFilePath() {
|
|
|
58569
58629
|
function getUtcDayString(date) {
|
|
58570
58630
|
return date.toISOString().slice(0, 10);
|
|
58571
58631
|
}
|
|
58572
|
-
function getUtcHourString(date) {
|
|
58573
|
-
return date.toISOString().slice(0, 13);
|
|
58574
|
-
}
|
|
58575
58632
|
function isPostHogActivityState(value) {
|
|
58576
58633
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
58577
58634
|
}
|
|
@@ -58611,24 +58668,24 @@ function writePostHogActivityState(nextState) {
|
|
|
58611
58668
|
function getPostHogActivityCaptureState(now = new Date) {
|
|
58612
58669
|
const state = readPostHogActivityState();
|
|
58613
58670
|
const dayUTC = getUtcDayString(now);
|
|
58614
|
-
const hourUTC = getUtcHourString(now);
|
|
58615
58671
|
const captureDaily = state.lastActiveDayUTC !== dayUTC;
|
|
58616
|
-
|
|
58617
|
-
if (captureDaily || captureHourly) {
|
|
58672
|
+
if (captureDaily) {
|
|
58618
58673
|
writePostHogActivityState({
|
|
58619
|
-
|
|
58620
|
-
|
|
58674
|
+
...state,
|
|
58675
|
+
lastActiveDayUTC: dayUTC
|
|
58621
58676
|
});
|
|
58622
58677
|
}
|
|
58623
58678
|
return {
|
|
58624
58679
|
dayUTC,
|
|
58625
|
-
|
|
58626
|
-
captureDaily,
|
|
58627
|
-
captureHourly
|
|
58680
|
+
captureDaily
|
|
58628
58681
|
};
|
|
58629
58682
|
}
|
|
58630
58683
|
|
|
58631
58684
|
// src/shared/posthog.ts
|
|
58685
|
+
var activityStateProviderOverride = null;
|
|
58686
|
+
function resolveActivityState() {
|
|
58687
|
+
return (activityStateProviderOverride ?? getPostHogActivityCaptureState)();
|
|
58688
|
+
}
|
|
58632
58689
|
var DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com";
|
|
58633
58690
|
var DEFAULT_POSTHOG_API_KEY = "phc_CFJhj5HyvA62QPhvyaUCtaq23aUfznnijg5VaaGkNk74";
|
|
58634
58691
|
var NO_OP_POSTHOG = {
|
|
@@ -58663,7 +58720,16 @@ function getPostHogApiKey() {
|
|
|
58663
58720
|
function getPostHogHost() {
|
|
58664
58721
|
return process.env.POSTHOG_HOST?.trim() || DEFAULT_POSTHOG_HOST;
|
|
58665
58722
|
}
|
|
58723
|
+
function safeCpus() {
|
|
58724
|
+
try {
|
|
58725
|
+
const cpus = os3.cpus();
|
|
58726
|
+
return { length: cpus.length, model: cpus[0]?.model };
|
|
58727
|
+
} catch {
|
|
58728
|
+
return { length: 0, model: undefined };
|
|
58729
|
+
}
|
|
58730
|
+
}
|
|
58666
58731
|
function getSharedProperties(source) {
|
|
58732
|
+
const cpus = safeCpus();
|
|
58667
58733
|
return {
|
|
58668
58734
|
platform: "evil-omo",
|
|
58669
58735
|
package_name: PUBLISHED_PACKAGE_NAME,
|
|
@@ -58676,8 +58742,8 @@ function getSharedProperties(source) {
|
|
|
58676
58742
|
$os_version: os3.release(),
|
|
58677
58743
|
os_arch: os3.arch(),
|
|
58678
58744
|
os_type: os3.type(),
|
|
58679
|
-
cpu_count:
|
|
58680
|
-
cpu_model:
|
|
58745
|
+
cpu_count: cpus.length,
|
|
58746
|
+
cpu_model: cpus.model,
|
|
58681
58747
|
total_memory_gb: Math.round(os3.totalmem() / 1024 / 1024 / 1024),
|
|
58682
58748
|
locale: Intl.DateTimeFormat().resolvedOptions().locale,
|
|
58683
58749
|
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
@@ -58718,7 +58784,7 @@ function createPostHogClient(source, options) {
|
|
|
58718
58784
|
});
|
|
58719
58785
|
},
|
|
58720
58786
|
trackActive: (distinctId, reason) => {
|
|
58721
|
-
const activityState =
|
|
58787
|
+
const activityState = resolveActivityState();
|
|
58722
58788
|
if (activityState.captureDaily) {
|
|
58723
58789
|
configuredClient.capture({
|
|
58724
58790
|
distinctId,
|
|
@@ -58730,17 +58796,6 @@ function createPostHogClient(source, options) {
|
|
|
58730
58796
|
}
|
|
58731
58797
|
});
|
|
58732
58798
|
}
|
|
58733
|
-
if (activityState.captureHourly) {
|
|
58734
|
-
configuredClient.capture({
|
|
58735
|
-
distinctId,
|
|
58736
|
-
event: "omo_hourly_active",
|
|
58737
|
-
properties: {
|
|
58738
|
-
...sharedProperties,
|
|
58739
|
-
hour_utc: activityState.hourUTC,
|
|
58740
|
-
reason
|
|
58741
|
-
}
|
|
58742
|
-
});
|
|
58743
|
-
}
|
|
58744
58799
|
},
|
|
58745
58800
|
shutdown: async () => configuredClient.shutdown()
|
|
58746
58801
|
};
|
|
@@ -59523,7 +59578,7 @@ async function promptInstallConfig(detected) {
|
|
|
59523
59578
|
message: "Do you have access to OpenCode Zen (opencode/ models)?",
|
|
59524
59579
|
options: [
|
|
59525
59580
|
{ value: "no", label: "No", hint: "Will use other configured providers" },
|
|
59526
|
-
{ value: "yes", label: "Yes", hint: "opencode/claude-opus-4-7, opencode/gpt-5.
|
|
59581
|
+
{ value: "yes", label: "Yes", hint: "opencode/claude-opus-4-7, opencode/gpt-5.5, etc." }
|
|
59527
59582
|
],
|
|
59528
59583
|
initialValue: initial.opencodeZen
|
|
59529
59584
|
});
|
|
@@ -76525,7 +76580,7 @@ var normalizeAgentName = (agent) => {
|
|
|
76525
76580
|
return;
|
|
76526
76581
|
const configKey = getAgentConfigKey(trimmed);
|
|
76527
76582
|
const displayName = getAgentDisplayName(configKey);
|
|
76528
|
-
const runtimeName =
|
|
76583
|
+
const runtimeName = getAgentDisplayName(configKey);
|
|
76529
76584
|
const isKnownAgent = displayName !== configKey;
|
|
76530
76585
|
return {
|
|
76531
76586
|
configKey,
|
|
@@ -76553,12 +76608,12 @@ var resolveRunAgent = (options, pluginConfig, env = process.env) => {
|
|
|
76553
76608
|
const configAgent = normalizeAgentName(pluginConfig.default_run_agent);
|
|
76554
76609
|
const resolved = cliAgent ?? envAgent ?? configAgent ?? {
|
|
76555
76610
|
configKey: DEFAULT_AGENT,
|
|
76556
|
-
resolvedName:
|
|
76611
|
+
resolvedName: getAgentDisplayName(DEFAULT_AGENT)
|
|
76557
76612
|
};
|
|
76558
76613
|
if (isAgentDisabled(resolved.configKey, pluginConfig)) {
|
|
76559
76614
|
const fallback = pickFallbackAgent(pluginConfig);
|
|
76560
76615
|
const fallbackDisplayName = getAgentDisplayName(fallback);
|
|
76561
|
-
const fallbackRuntimeName =
|
|
76616
|
+
const fallbackRuntimeName = getAgentDisplayName(fallback);
|
|
76562
76617
|
const fallbackDisabled = isAgentDisabled(fallback, pluginConfig);
|
|
76563
76618
|
if (fallbackDisabled) {
|
|
76564
76619
|
console.log(import_picocolors12.default.yellow(`Requested agent "${resolved.resolvedName}" is disabled and no enabled core agent was found. Proceeding with "${fallbackDisplayName}".`));
|
|
@@ -78309,7 +78364,7 @@ function buildEffectiveResolution(requirement, userOverride) {
|
|
|
78309
78364
|
|
|
78310
78365
|
// src/cli/doctor/checks/model-resolution.ts
|
|
78311
78366
|
function parseProviderModel(value) {
|
|
78312
|
-
const slashIndex = value.
|
|
78367
|
+
const slashIndex = value.indexOf("/");
|
|
78313
78368
|
if (slashIndex <= 0 || slashIndex === value.length - 1) {
|
|
78314
78369
|
return null;
|
|
78315
78370
|
}
|
|
@@ -78363,7 +78418,7 @@ function collectCapabilityResolutionIssues(info) {
|
|
|
78363
78418
|
const allEntries = [...info.agents, ...info.categories];
|
|
78364
78419
|
const fallbackEntries = allEntries.filter((entry) => {
|
|
78365
78420
|
const mode = entry.capabilityDiagnostics?.resolutionMode;
|
|
78366
|
-
return mode === "
|
|
78421
|
+
return mode === "unknown";
|
|
78367
78422
|
});
|
|
78368
78423
|
if (fallbackEntries.length === 0) {
|
|
78369
78424
|
return issues;
|
|
@@ -80236,7 +80291,7 @@ Examples:
|
|
|
80236
80291
|
$ bunx evil-omo run --on-complete "notify-send Done" "Fix the bug"
|
|
80237
80292
|
$ bunx evil-omo run --session-id ses_abc123 "Continue the work"
|
|
80238
80293
|
$ bunx evil-omo run --model anthropic/claude-sonnet-4 "Fix the bug"
|
|
80239
|
-
$ bunx evil-omo run --agent Sisyphus --model openai/gpt-5.
|
|
80294
|
+
$ bunx evil-omo run --agent Sisyphus --model openai/gpt-5.5 "Implement feature X"
|
|
80240
80295
|
|
|
80241
80296
|
Agent resolution order:
|
|
80242
80297
|
1) --agent flag
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DelegatedModelConfig } from "../../shared/model-resolution-types";
|
|
2
|
+
import type { BackgroundTask, BackgroundTaskAttempt, BackgroundTaskStatus } from "./types";
|
|
3
|
+
type TerminalAttemptStatus = Extract<BackgroundTaskStatus, "completed" | "error" | "cancelled" | "interrupt">;
|
|
4
|
+
export declare function getCurrentAttempt(task: BackgroundTask): BackgroundTaskAttempt | undefined;
|
|
5
|
+
export declare function ensureCurrentAttempt(task: BackgroundTask, model?: DelegatedModelConfig | undefined): BackgroundTaskAttempt;
|
|
6
|
+
export declare function projectTaskFromCurrentAttempt(task: BackgroundTask): BackgroundTask;
|
|
7
|
+
export declare function startAttempt(task: BackgroundTask, model: DelegatedModelConfig | undefined): BackgroundTaskAttempt;
|
|
8
|
+
export declare function bindAttemptSession(task: BackgroundTask, attemptID: string, sessionID: string, model: DelegatedModelConfig | undefined): BackgroundTaskAttempt | undefined;
|
|
9
|
+
export declare function finalizeAttempt(task: BackgroundTask, attemptID: string, status: TerminalAttemptStatus, error?: string): BackgroundTaskAttempt | undefined;
|
|
10
|
+
export declare function scheduleRetryAttempt(task: BackgroundTask, failedAttemptID: string, nextModel: DelegatedModelConfig, error?: string): BackgroundTaskAttempt | undefined;
|
|
11
|
+
export declare function findAttemptBySession(task: BackgroundTask, sessionID: string): BackgroundTaskAttempt | undefined;
|
|
12
|
+
export {};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { BackgroundTaskStatus } from "./types";
|
|
1
|
+
import type { BackgroundTaskAttempt, BackgroundTaskStatus } from "./types";
|
|
2
2
|
export type BackgroundTaskNotificationStatus = "COMPLETED" | "CANCELLED" | "INTERRUPTED" | "ERROR";
|
|
3
3
|
export interface BackgroundTaskNotificationTask {
|
|
4
4
|
id: string;
|
|
5
5
|
description: string;
|
|
6
6
|
status: BackgroundTaskStatus;
|
|
7
7
|
error?: string;
|
|
8
|
+
attempts?: BackgroundTaskAttempt[];
|
|
8
9
|
}
|
|
9
10
|
export declare function buildBackgroundTaskNotificationText(input: {
|
|
10
11
|
task: BackgroundTaskNotificationTask;
|
|
@@ -13,4 +13,12 @@ export declare function tryFallbackRetry(args: {
|
|
|
13
13
|
idleDeferralTimers: Map<string, ReturnType<typeof setTimeout>>;
|
|
14
14
|
queuesByKey: Map<string, QueueItem[]>;
|
|
15
15
|
processKey: (key: string) => void;
|
|
16
|
+
onRetrying?: (details: {
|
|
17
|
+
task: BackgroundTask;
|
|
18
|
+
source: string;
|
|
19
|
+
previousSessionID?: string;
|
|
20
|
+
failedModel?: string;
|
|
21
|
+
failedError?: string;
|
|
22
|
+
nextModel: string;
|
|
23
|
+
}) => void;
|
|
16
24
|
}): Promise<boolean>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
+
import type { ModelFallbackControllerAccessor } from "../../hooks/model-fallback";
|
|
2
3
|
import type { BackgroundTask, LaunchInput, ResumeInput } from "./types";
|
|
3
4
|
import { TaskHistory } from "./task-history";
|
|
4
5
|
import type { BackgroundTaskConfig, TmuxConfig } from "../../config/schema";
|
|
@@ -22,6 +23,7 @@ export interface SubagentSessionCreatedEvent {
|
|
|
22
23
|
export type OnSubagentSessionCreated = (event: SubagentSessionCreatedEvent) => Promise<void>;
|
|
23
24
|
export declare class BackgroundManager {
|
|
24
25
|
private tasks;
|
|
26
|
+
private tasksByParentSession;
|
|
25
27
|
private notifications;
|
|
26
28
|
private pendingNotifications;
|
|
27
29
|
private pendingByParent;
|
|
@@ -46,6 +48,7 @@ export declare class BackgroundManager {
|
|
|
46
48
|
private rootDescendantCounts;
|
|
47
49
|
private preStartDescendantReservations;
|
|
48
50
|
private enableParentSessionNotifications;
|
|
51
|
+
private modelFallbackControllerAccessor?;
|
|
49
52
|
readonly taskHistory: TaskHistory;
|
|
50
53
|
private cachedCircuitBreakerSettings?;
|
|
51
54
|
constructor(ctx: PluginInput, config?: BackgroundTaskConfig, options?: {
|
|
@@ -53,6 +56,7 @@ export declare class BackgroundManager {
|
|
|
53
56
|
onSubagentSessionCreated?: OnSubagentSessionCreated;
|
|
54
57
|
onShutdown?: () => void | Promise<void>;
|
|
55
58
|
enableParentSessionNotifications?: boolean;
|
|
59
|
+
modelFallbackControllerAccessor?: ModelFallbackControllerAccessor;
|
|
56
60
|
});
|
|
57
61
|
private abortSessionWithLogging;
|
|
58
62
|
assertCanSpawn(parentSessionID: string): Promise<SubagentSpawnContext>;
|
|
@@ -67,6 +71,10 @@ export declare class BackgroundManager {
|
|
|
67
71
|
private markPreStartDescendantReservation;
|
|
68
72
|
private settlePreStartDescendantReservation;
|
|
69
73
|
private rollbackPreStartDescendantReservation;
|
|
74
|
+
private addTask;
|
|
75
|
+
private removeTask;
|
|
76
|
+
private updateTaskParent;
|
|
77
|
+
private removeTaskFromParentIndex;
|
|
70
78
|
launch(input: LaunchInput): Promise<BackgroundTask>;
|
|
71
79
|
private processKey;
|
|
72
80
|
private startTask;
|
|
@@ -74,6 +82,7 @@ export declare class BackgroundManager {
|
|
|
74
82
|
getTasksByParentSession(sessionID: string): BackgroundTask[];
|
|
75
83
|
getAllDescendantTasks(sessionID: string): BackgroundTask[];
|
|
76
84
|
findBySession(sessionID: string): BackgroundTask | undefined;
|
|
85
|
+
private resolveTaskAttemptBySession;
|
|
77
86
|
private getConcurrencyKeyFromInput;
|
|
78
87
|
/**
|
|
79
88
|
* Track a task created elsewhere (e.g., from task) for notification tracking.
|