oh-my-openidea 0.1.3 → 0.1.4
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.md +6 -6
- package/dist/cli/dynamic-model-selection.d.ts +1 -1
- package/dist/cli/index.js +157 -151
- package/dist/cli/providers.d.ts +40 -40
- package/dist/cli/scoring-v2/types.d.ts +1 -1
- package/dist/config/loader.d.ts +1 -1
- package/dist/index.js +9 -3
- package/dist/utils/agent-variant.d.ts +5 -5
- package/package.json +1 -1
- package/src/skills/cartography/SKILL.md +32 -0
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ Additional guides:
|
|
|
57
57
|
|
|
58
58
|
### 01. Orchestrator: The Architect of Discovery
|
|
59
59
|
|
|
60
|
-
| The one who sees all paths. | The Orchestrator
|
|
60
|
+
| The one who sees all paths. | The Orchestrator is the lead coordinator for the whole research workflow. Give it a problem, and it decides which agents should work next, what information is still missing, and how the pieces should come together into a strong research direction. |
|
|
61
61
|
| --- | --- |
|
|
62
62
|
| Role: Strategic research coordination and idea synthesis |
|
|
63
63
|
| Prompt: orchestrator.ts |
|
|
@@ -67,7 +67,7 @@ Additional guides:
|
|
|
67
67
|
|
|
68
68
|
### 02. Surveyor: The Cartographer of Knowledge
|
|
69
69
|
|
|
70
|
-
| The one who maps the unknown. | The Surveyor
|
|
70
|
+
| The one who maps the unknown. | The Surveyor finds and collects the most relevant papers for your topic. It helps you quickly understand what has already been done, which papers matter most, and where the current limits of the literature are. |
|
|
71
71
|
| --- | --- |
|
|
72
72
|
| Role: Literature search and paper retrieval |
|
|
73
73
|
| Prompt: surveyor.ts |
|
|
@@ -77,7 +77,7 @@ Additional guides:
|
|
|
77
77
|
|
|
78
78
|
### 03. Synthesizer: The Weaver of Understanding
|
|
79
79
|
|
|
80
|
-
| The one who connects the dots. | The Synthesizer
|
|
80
|
+
| The one who connects the dots. | The Synthesizer turns a pile of papers into a clear understanding of the field. It groups results, highlights patterns and disagreements, and points out open problems that can lead to new research ideas. |
|
|
81
81
|
| --- | --- |
|
|
82
82
|
| Role: Gap analysis and knowledge synthesis |
|
|
83
83
|
| Prompt: synthesizer.ts |
|
|
@@ -87,7 +87,7 @@ Additional guides:
|
|
|
87
87
|
|
|
88
88
|
### 04. Critic: The Guardian of Truth
|
|
89
89
|
|
|
90
|
-
| The voice of rigorous doubt. | The Critic
|
|
90
|
+
| The voice of rigorous doubt. | The Critic stress-tests your idea before you invest too much in it. It looks for weak assumptions, missing baselines, overlap with prior work, and other reasons the idea might fail novelty or review standards. |
|
|
91
91
|
| --- | --- |
|
|
92
92
|
| Role: Novelty validation and adversarial review |
|
|
93
93
|
| Prompt: critic.ts |
|
|
@@ -97,7 +97,7 @@ Additional guides:
|
|
|
97
97
|
|
|
98
98
|
### 05. Architect: The Builder of Methods
|
|
99
99
|
|
|
100
|
-
| The one who turns vision into plan. | The Architect
|
|
100
|
+
| The one who turns vision into plan. | The Architect converts an idea into a concrete experiment plan. It defines datasets, baselines, metrics, ablations, failure cases, and resource needs so you know exactly how to test whether the idea works. |
|
|
101
101
|
| --- | --- |
|
|
102
102
|
| Role: Methodology and experiment design |
|
|
103
103
|
| Prompt: architect.ts |
|
|
@@ -107,7 +107,7 @@ Additional guides:
|
|
|
107
107
|
|
|
108
108
|
### 06. Writer: The Voice of Science
|
|
109
109
|
|
|
110
|
-
| The one who makes it legible to the world. | The Writer
|
|
110
|
+
| The one who makes it legible to the world. | The Writer turns your research into a clear paper draft. It helps organize the story, sharpen the main message, and present the method and results in a way that is easy for readers and reviewers to follow. |
|
|
111
111
|
| --- | --- |
|
|
112
112
|
| Role: Research writing and paper structure |
|
|
113
113
|
| Prompt: writer.ts |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DiscoveredModel, DynamicModelPlan, ExternalSignalMap, InstallConfig, ScoringEngineVersion } from './types';
|
|
2
|
-
declare const AGENTS: readonly ["orchestrator", "
|
|
2
|
+
declare const AGENTS: readonly ["orchestrator", "critic", "architect", "surveyor", "synthesizer", "writer"];
|
|
3
3
|
type AgentName = (typeof AGENTS)[number];
|
|
4
4
|
export type V1RankedScore = {
|
|
5
5
|
model: string;
|
package/dist/cli/index.js
CHANGED
|
@@ -13811,6 +13811,12 @@ var CUSTOM_SKILLS = [
|
|
|
13811
13811
|
description: "Paper outline generation workflow",
|
|
13812
13812
|
allowedAgents: ["orchestrator", "writer"],
|
|
13813
13813
|
sourcePath: "src/skills/paper-outline"
|
|
13814
|
+
},
|
|
13815
|
+
{
|
|
13816
|
+
name: "cartography",
|
|
13817
|
+
description: "Repository understanding and hierarchical codemap generation",
|
|
13818
|
+
allowedAgents: ["orchestrator"],
|
|
13819
|
+
sourcePath: "src/skills/cartography"
|
|
13814
13820
|
}
|
|
13815
13821
|
];
|
|
13816
13822
|
function getCustomSkillsDir() {
|
|
@@ -13866,7 +13872,7 @@ var RECOMMENDED_SKILLS = [
|
|
|
13866
13872
|
name: "agent-browser",
|
|
13867
13873
|
repo: "https://github.com/vercel-labs/agent-browser",
|
|
13868
13874
|
skillName: "agent-browser",
|
|
13869
|
-
allowedAgents: ["
|
|
13875
|
+
allowedAgents: ["architect"],
|
|
13870
13876
|
description: "High-performance browser automation",
|
|
13871
13877
|
postInstallCommands: [
|
|
13872
13878
|
"npm install -g agent-browser",
|
|
@@ -13912,85 +13918,85 @@ function installSkill(skill) {
|
|
|
13912
13918
|
// src/cli/providers.ts
|
|
13913
13919
|
var AGENT_NAMES = [
|
|
13914
13920
|
"orchestrator",
|
|
13915
|
-
"
|
|
13916
|
-
"
|
|
13917
|
-
"
|
|
13918
|
-
"
|
|
13919
|
-
"
|
|
13921
|
+
"critic",
|
|
13922
|
+
"architect",
|
|
13923
|
+
"surveyor",
|
|
13924
|
+
"synthesizer",
|
|
13925
|
+
"writer"
|
|
13920
13926
|
];
|
|
13921
13927
|
var MODEL_MAPPINGS = {
|
|
13922
13928
|
kimi: {
|
|
13923
13929
|
orchestrator: { model: "kimi-for-coding/k2p5" },
|
|
13924
|
-
|
|
13925
|
-
|
|
13926
|
-
|
|
13927
|
-
|
|
13928
|
-
|
|
13930
|
+
critic: { model: "kimi-for-coding/k2p5", variant: "high" },
|
|
13931
|
+
synthesizer: { model: "kimi-for-coding/k2p5", variant: "low" },
|
|
13932
|
+
surveyor: { model: "kimi-for-coding/k2p5", variant: "low" },
|
|
13933
|
+
architect: { model: "kimi-for-coding/k2p5", variant: "medium" },
|
|
13934
|
+
writer: { model: "kimi-for-coding/k2p5", variant: "low" }
|
|
13929
13935
|
},
|
|
13930
13936
|
openai: {
|
|
13931
13937
|
orchestrator: { model: "openai/gpt-5.3-codex" },
|
|
13932
|
-
|
|
13933
|
-
|
|
13934
|
-
|
|
13935
|
-
|
|
13936
|
-
|
|
13938
|
+
critic: { model: "openai/gpt-5.3-codex", variant: "high" },
|
|
13939
|
+
synthesizer: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
|
|
13940
|
+
surveyor: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
|
|
13941
|
+
architect: { model: "openai/gpt-5.1-codex-mini", variant: "medium" },
|
|
13942
|
+
writer: { model: "openai/gpt-5.1-codex-mini", variant: "low" }
|
|
13937
13943
|
},
|
|
13938
13944
|
anthropic: {
|
|
13939
13945
|
orchestrator: { model: "anthropic/claude-opus-4-6" },
|
|
13940
|
-
|
|
13941
|
-
|
|
13942
|
-
|
|
13943
|
-
|
|
13944
|
-
|
|
13946
|
+
critic: { model: "anthropic/claude-opus-4-6", variant: "high" },
|
|
13947
|
+
synthesizer: { model: "anthropic/claude-sonnet-4-5", variant: "low" },
|
|
13948
|
+
surveyor: { model: "anthropic/claude-haiku-4-5", variant: "low" },
|
|
13949
|
+
architect: { model: "anthropic/claude-sonnet-4-5", variant: "medium" },
|
|
13950
|
+
writer: { model: "anthropic/claude-sonnet-4-5", variant: "low" }
|
|
13945
13951
|
},
|
|
13946
13952
|
copilot: {
|
|
13947
13953
|
orchestrator: { model: "github-copilot/grok-code-fast-1" },
|
|
13948
|
-
|
|
13949
|
-
|
|
13950
|
-
|
|
13951
|
-
|
|
13952
|
-
|
|
13954
|
+
critic: { model: "github-copilot/grok-code-fast-1", variant: "high" },
|
|
13955
|
+
synthesizer: { model: "github-copilot/grok-code-fast-1", variant: "low" },
|
|
13956
|
+
surveyor: { model: "github-copilot/grok-code-fast-1", variant: "low" },
|
|
13957
|
+
architect: { model: "github-copilot/grok-code-fast-1", variant: "medium" },
|
|
13958
|
+
writer: { model: "github-copilot/grok-code-fast-1", variant: "low" }
|
|
13953
13959
|
},
|
|
13954
13960
|
"zai-plan": {
|
|
13955
13961
|
orchestrator: { model: "zai-coding-plan/glm-4.7" },
|
|
13956
|
-
|
|
13957
|
-
|
|
13958
|
-
|
|
13959
|
-
|
|
13960
|
-
|
|
13962
|
+
critic: { model: "zai-coding-plan/glm-4.7", variant: "high" },
|
|
13963
|
+
synthesizer: { model: "zai-coding-plan/glm-4.7", variant: "low" },
|
|
13964
|
+
surveyor: { model: "zai-coding-plan/glm-4.7", variant: "low" },
|
|
13965
|
+
architect: { model: "zai-coding-plan/glm-4.7", variant: "medium" },
|
|
13966
|
+
writer: { model: "zai-coding-plan/glm-4.7", variant: "low" }
|
|
13961
13967
|
},
|
|
13962
13968
|
antigravity: {
|
|
13963
13969
|
orchestrator: { model: "google/antigravity-gemini-3-flash" },
|
|
13964
|
-
|
|
13965
|
-
|
|
13970
|
+
critic: { model: "google/antigravity-gemini-3.1-pro" },
|
|
13971
|
+
synthesizer: {
|
|
13966
13972
|
model: "google/antigravity-gemini-3-flash",
|
|
13967
13973
|
variant: "low"
|
|
13968
13974
|
},
|
|
13969
|
-
|
|
13975
|
+
surveyor: {
|
|
13970
13976
|
model: "google/antigravity-gemini-3-flash",
|
|
13971
13977
|
variant: "low"
|
|
13972
13978
|
},
|
|
13973
|
-
|
|
13979
|
+
architect: {
|
|
13974
13980
|
model: "google/antigravity-gemini-3-flash",
|
|
13975
13981
|
variant: "medium"
|
|
13976
13982
|
},
|
|
13977
|
-
|
|
13983
|
+
writer: { model: "google/antigravity-gemini-3-flash", variant: "low" }
|
|
13978
13984
|
},
|
|
13979
13985
|
chutes: {
|
|
13980
13986
|
orchestrator: { model: "chutes/kimi-k2.5" },
|
|
13981
|
-
|
|
13982
|
-
|
|
13983
|
-
|
|
13984
|
-
|
|
13985
|
-
|
|
13987
|
+
critic: { model: "chutes/kimi-k2.5", variant: "high" },
|
|
13988
|
+
synthesizer: { model: "chutes/minimax-m2.1", variant: "low" },
|
|
13989
|
+
surveyor: { model: "chutes/minimax-m2.1", variant: "low" },
|
|
13990
|
+
architect: { model: "chutes/kimi-k2.5", variant: "medium" },
|
|
13991
|
+
writer: { model: "chutes/minimax-m2.1", variant: "low" }
|
|
13986
13992
|
},
|
|
13987
13993
|
"zen-free": {
|
|
13988
13994
|
orchestrator: { model: "opencode/big-pickle" },
|
|
13989
|
-
|
|
13990
|
-
|
|
13991
|
-
|
|
13992
|
-
|
|
13993
|
-
|
|
13995
|
+
critic: { model: "opencode/big-pickle", variant: "high" },
|
|
13996
|
+
synthesizer: { model: "opencode/big-pickle", variant: "low" },
|
|
13997
|
+
surveyor: { model: "opencode/big-pickle", variant: "low" },
|
|
13998
|
+
architect: { model: "opencode/big-pickle", variant: "medium" },
|
|
13999
|
+
writer: { model: "opencode/big-pickle", variant: "low" }
|
|
13994
14000
|
}
|
|
13995
14001
|
};
|
|
13996
14002
|
function generateAntigravityMixedPreset(config2, existingPreset) {
|
|
@@ -13998,7 +14004,7 @@ function generateAntigravityMixedPreset(config2, existingPreset) {
|
|
|
13998
14004
|
const createAgentConfig = (agentName, modelInfo) => {
|
|
13999
14005
|
const isOrchestrator = agentName === "orchestrator";
|
|
14000
14006
|
const skills = isOrchestrator ? ["*"] : RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName);
|
|
14001
|
-
if (agentName === "
|
|
14007
|
+
if (agentName === "architect" && !skills.includes("agent-browser")) {
|
|
14002
14008
|
skills.push("agent-browser");
|
|
14003
14009
|
}
|
|
14004
14010
|
return {
|
|
@@ -14012,7 +14018,7 @@ function generateAntigravityMixedPreset(config2, existingPreset) {
|
|
|
14012
14018
|
model: "google/antigravity-gemini-3-flash"
|
|
14013
14019
|
};
|
|
14014
14020
|
const chutesPrimary = config2.selectedChutesPrimaryModel ?? MODEL_MAPPINGS.chutes.orchestrator.model;
|
|
14015
|
-
const chutesSupport = config2.selectedChutesSecondaryModel ?? MODEL_MAPPINGS.chutes.
|
|
14021
|
+
const chutesSupport = config2.selectedChutesSecondaryModel ?? MODEL_MAPPINGS.chutes.surveyor.model;
|
|
14016
14022
|
if (config2.hasKimi) {
|
|
14017
14023
|
result.orchestrator = createAgentConfig("orchestrator", MODEL_MAPPINGS.kimi.orchestrator);
|
|
14018
14024
|
} else if (config2.hasChutes) {
|
|
@@ -14023,45 +14029,45 @@ function generateAntigravityMixedPreset(config2, existingPreset) {
|
|
|
14023
14029
|
result.orchestrator = createAgentConfig("orchestrator", MODEL_MAPPINGS.antigravity.orchestrator);
|
|
14024
14030
|
}
|
|
14025
14031
|
if (config2.hasOpenAI) {
|
|
14026
|
-
result.
|
|
14027
|
-
} else if (!result.
|
|
14028
|
-
result.
|
|
14032
|
+
result.critic = createAgentConfig("critic", MODEL_MAPPINGS.openai.critic);
|
|
14033
|
+
} else if (!result.critic) {
|
|
14034
|
+
result.critic = createAgentConfig("critic", MODEL_MAPPINGS.antigravity.critic);
|
|
14029
14035
|
}
|
|
14030
|
-
result.
|
|
14036
|
+
result.surveyor = createAgentConfig("surveyor", {
|
|
14031
14037
|
...antigravityFlash,
|
|
14032
14038
|
variant: "low"
|
|
14033
14039
|
});
|
|
14034
14040
|
if (config2.hasChutes) {
|
|
14035
|
-
result.
|
|
14041
|
+
result.synthesizer = createAgentConfig("synthesizer", {
|
|
14036
14042
|
model: chutesSupport,
|
|
14037
14043
|
variant: "low"
|
|
14038
14044
|
});
|
|
14039
|
-
result.
|
|
14045
|
+
result.architect = createAgentConfig("architect", {
|
|
14040
14046
|
model: chutesPrimary,
|
|
14041
14047
|
variant: "medium"
|
|
14042
14048
|
});
|
|
14043
14049
|
} else {
|
|
14044
|
-
result.
|
|
14050
|
+
result.synthesizer = createAgentConfig("synthesizer", {
|
|
14045
14051
|
...antigravityFlash,
|
|
14046
14052
|
variant: "low"
|
|
14047
14053
|
});
|
|
14048
|
-
result.
|
|
14054
|
+
result.architect = createAgentConfig("architect", {
|
|
14049
14055
|
...antigravityFlash,
|
|
14050
14056
|
variant: "medium"
|
|
14051
14057
|
});
|
|
14052
14058
|
}
|
|
14053
14059
|
if (config2.hasOpenAI) {
|
|
14054
|
-
result.
|
|
14055
|
-
...MODEL_MAPPINGS.openai.
|
|
14060
|
+
result.writer = createAgentConfig("writer", {
|
|
14061
|
+
...MODEL_MAPPINGS.openai.critic,
|
|
14056
14062
|
variant: "low"
|
|
14057
14063
|
});
|
|
14058
14064
|
} else if (config2.hasChutes) {
|
|
14059
|
-
result.
|
|
14065
|
+
result.writer = createAgentConfig("writer", {
|
|
14060
14066
|
model: chutesSupport,
|
|
14061
14067
|
variant: "low"
|
|
14062
14068
|
});
|
|
14063
14069
|
} else {
|
|
14064
|
-
result.
|
|
14070
|
+
result.writer = createAgentConfig("writer", {
|
|
14065
14071
|
...antigravityFlash,
|
|
14066
14072
|
variant: "low"
|
|
14067
14073
|
});
|
|
@@ -14136,7 +14142,7 @@ function generateLiteConfig(installConfig) {
|
|
|
14136
14142
|
const createAgentConfig = (agentName, modelInfo) => {
|
|
14137
14143
|
const isOrchestrator = agentName === "orchestrator";
|
|
14138
14144
|
const skills = isOrchestrator ? ["*"] : RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName);
|
|
14139
|
-
if (agentName === "
|
|
14145
|
+
if (agentName === "architect" && !skills.includes("agent-browser")) {
|
|
14140
14146
|
skills.push("agent-browser");
|
|
14141
14147
|
}
|
|
14142
14148
|
return {
|
|
@@ -14179,12 +14185,12 @@ function generateLiteConfig(installConfig) {
|
|
|
14179
14185
|
};
|
|
14180
14186
|
if (!hasExternalProviders) {
|
|
14181
14187
|
setAgent("orchestrator", primaryModel);
|
|
14182
|
-
setAgent("
|
|
14183
|
-
setAgent("
|
|
14188
|
+
setAgent("critic", primaryModel);
|
|
14189
|
+
setAgent("architect", primaryModel);
|
|
14184
14190
|
}
|
|
14185
|
-
setAgent("
|
|
14186
|
-
setAgent("
|
|
14187
|
-
setAgent("
|
|
14191
|
+
setAgent("synthesizer", secondaryModel);
|
|
14192
|
+
setAgent("surveyor", secondaryModel);
|
|
14193
|
+
setAgent("writer", secondaryModel);
|
|
14188
14194
|
};
|
|
14189
14195
|
const applyChutesAssignments = (presetAgents) => {
|
|
14190
14196
|
if (!installConfig.hasChutes)
|
|
@@ -14200,11 +14206,11 @@ function generateLiteConfig(installConfig) {
|
|
|
14200
14206
|
presetAgents[agentName] = createAgentConfig(agentName, { model });
|
|
14201
14207
|
};
|
|
14202
14208
|
setAgent("orchestrator", primaryModel);
|
|
14203
|
-
setAgent("
|
|
14204
|
-
setAgent("
|
|
14205
|
-
setAgent("
|
|
14206
|
-
setAgent("
|
|
14207
|
-
setAgent("
|
|
14209
|
+
setAgent("critic", primaryModel);
|
|
14210
|
+
setAgent("architect", primaryModel);
|
|
14211
|
+
setAgent("synthesizer", secondaryModel);
|
|
14212
|
+
setAgent("surveyor", secondaryModel);
|
|
14213
|
+
setAgent("writer", secondaryModel);
|
|
14208
14214
|
};
|
|
14209
14215
|
const dedupeModels = (models) => {
|
|
14210
14216
|
const seen = new Set;
|
|
@@ -14220,7 +14226,7 @@ function generateLiteConfig(installConfig) {
|
|
|
14220
14226
|
const getOpenCodeFallbackForAgent = (agentName) => {
|
|
14221
14227
|
if (!installConfig.useOpenCodeFreeModels)
|
|
14222
14228
|
return;
|
|
14223
|
-
const isSupport = agentName === "
|
|
14229
|
+
const isSupport = agentName === "surveyor" || agentName === "synthesizer" || agentName === "writer";
|
|
14224
14230
|
if (isSupport) {
|
|
14225
14231
|
return installConfig.selectedOpenCodeSecondaryModel ?? installConfig.selectedOpenCodePrimaryModel;
|
|
14226
14232
|
}
|
|
@@ -14229,7 +14235,7 @@ function generateLiteConfig(installConfig) {
|
|
|
14229
14235
|
const getChutesFallbackForAgent = (agentName) => {
|
|
14230
14236
|
if (!installConfig.hasChutes)
|
|
14231
14237
|
return;
|
|
14232
|
-
const isSupport = agentName === "
|
|
14238
|
+
const isSupport = agentName === "surveyor" || agentName === "synthesizer" || agentName === "writer";
|
|
14233
14239
|
if (isSupport) {
|
|
14234
14240
|
return installConfig.selectedChutesSecondaryModel ?? installConfig.selectedChutesPrimaryModel ?? MODEL_MAPPINGS.chutes[agentName].model;
|
|
14235
14241
|
}
|
|
@@ -14265,8 +14271,8 @@ function generateLiteConfig(installConfig) {
|
|
|
14265
14271
|
const mapping = MODEL_MAPPINGS[mappingName];
|
|
14266
14272
|
return Object.fromEntries(Object.entries(mapping).map(([agentName, modelInfo]) => {
|
|
14267
14273
|
let activeModelInfo = { ...modelInfo };
|
|
14268
|
-
if (activePreset === "kimi" && installConfig.hasOpenAI && agentName === "
|
|
14269
|
-
activeModelInfo = { ...MODEL_MAPPINGS.openai.
|
|
14274
|
+
if (activePreset === "kimi" && installConfig.hasOpenAI && agentName === "critic") {
|
|
14275
|
+
activeModelInfo = { ...MODEL_MAPPINGS.openai.critic };
|
|
14270
14276
|
}
|
|
14271
14277
|
return [agentName, createAgentConfig(agentName, activeModelInfo)];
|
|
14272
14278
|
}));
|
|
@@ -14764,27 +14770,27 @@ function kimiVersionBonus(agent, model) {
|
|
|
14764
14770
|
const isMinimaxM21 = isChutes && /minimax[-_ ]?m2\.1/.test(lowered);
|
|
14765
14771
|
const qwenPenalty = {
|
|
14766
14772
|
orchestrator: -6,
|
|
14767
|
-
|
|
14768
|
-
|
|
14769
|
-
|
|
14770
|
-
|
|
14771
|
-
|
|
14773
|
+
critic: -6,
|
|
14774
|
+
architect: -8,
|
|
14775
|
+
surveyor: -6,
|
|
14776
|
+
synthesizer: -12,
|
|
14777
|
+
writer: -12
|
|
14772
14778
|
};
|
|
14773
14779
|
const kimiBonus = {
|
|
14774
14780
|
orchestrator: 1,
|
|
14775
|
-
|
|
14776
|
-
|
|
14777
|
-
|
|
14778
|
-
|
|
14779
|
-
|
|
14781
|
+
critic: 1,
|
|
14782
|
+
architect: 3,
|
|
14783
|
+
surveyor: 2,
|
|
14784
|
+
synthesizer: 2,
|
|
14785
|
+
writer: 3
|
|
14780
14786
|
};
|
|
14781
14787
|
const minimaxBonus = {
|
|
14782
14788
|
orchestrator: 1,
|
|
14783
|
-
|
|
14784
|
-
|
|
14785
|
-
|
|
14786
|
-
|
|
14787
|
-
|
|
14789
|
+
critic: 1,
|
|
14790
|
+
architect: 2,
|
|
14791
|
+
surveyor: 4,
|
|
14792
|
+
synthesizer: 4,
|
|
14793
|
+
writer: 4
|
|
14788
14794
|
};
|
|
14789
14795
|
if (isQwen3)
|
|
14790
14796
|
return qwenPenalty[agent];
|
|
@@ -14804,11 +14810,11 @@ function extractFeatureVector(model, agent, externalSignals) {
|
|
|
14804
14810
|
const quality = (signal?.qualityScore ?? 0) / 100;
|
|
14805
14811
|
const coding = (signal?.codingScore ?? 0) / 100;
|
|
14806
14812
|
const pricePenalty = Math.min(blendedPrice(signal), 50) / 10;
|
|
14807
|
-
const explorerLatencyMultiplier = agent === "
|
|
14813
|
+
const explorerLatencyMultiplier = agent === "surveyor" ? 1.4 : 1;
|
|
14808
14814
|
return {
|
|
14809
14815
|
status: statusValue(model.status),
|
|
14810
14816
|
context: normalizedContext,
|
|
14811
|
-
output: agent === "
|
|
14817
|
+
output: agent === "architect" ? designerOutputScore : normalizedOutput,
|
|
14812
14818
|
versionBonus,
|
|
14813
14819
|
reasoning: capability(model.reasoning),
|
|
14814
14820
|
toolcall: capability(model.toolcall),
|
|
@@ -14842,33 +14848,33 @@ var AGENT_WEIGHT_OVERRIDES = {
|
|
|
14842
14848
|
coding: 16,
|
|
14843
14849
|
latencyPenalty: -2
|
|
14844
14850
|
},
|
|
14845
|
-
|
|
14851
|
+
critic: {
|
|
14846
14852
|
reasoning: 26,
|
|
14847
14853
|
quality: 20,
|
|
14848
14854
|
coding: 18,
|
|
14849
14855
|
latencyPenalty: -2,
|
|
14850
14856
|
output: 7
|
|
14851
14857
|
},
|
|
14852
|
-
|
|
14858
|
+
architect: {
|
|
14853
14859
|
attachment: 12,
|
|
14854
14860
|
output: 10,
|
|
14855
14861
|
quality: 16,
|
|
14856
14862
|
coding: 10
|
|
14857
14863
|
},
|
|
14858
|
-
|
|
14864
|
+
surveyor: {
|
|
14859
14865
|
latencyPenalty: -8,
|
|
14860
14866
|
toolcall: 24,
|
|
14861
14867
|
reasoning: 2,
|
|
14862
14868
|
context: 4,
|
|
14863
14869
|
output: 4
|
|
14864
14870
|
},
|
|
14865
|
-
|
|
14871
|
+
synthesizer: {
|
|
14866
14872
|
context: 14,
|
|
14867
14873
|
output: 10,
|
|
14868
14874
|
quality: 18,
|
|
14869
14875
|
coding: 14
|
|
14870
14876
|
},
|
|
14871
|
-
|
|
14877
|
+
writer: {
|
|
14872
14878
|
coding: 28,
|
|
14873
14879
|
toolcall: 22,
|
|
14874
14880
|
reasoning: 12,
|
|
@@ -14930,28 +14936,28 @@ function rankModelsV2(models, agent, externalSignals) {
|
|
|
14930
14936
|
// src/cli/dynamic-model-selection.ts
|
|
14931
14937
|
var AGENTS = [
|
|
14932
14938
|
"orchestrator",
|
|
14933
|
-
"
|
|
14934
|
-
"
|
|
14935
|
-
"
|
|
14936
|
-
"
|
|
14937
|
-
"
|
|
14939
|
+
"critic",
|
|
14940
|
+
"architect",
|
|
14941
|
+
"surveyor",
|
|
14942
|
+
"synthesizer",
|
|
14943
|
+
"writer"
|
|
14938
14944
|
];
|
|
14939
14945
|
var FREE_BIASED_PROVIDERS = new Set(["opencode"]);
|
|
14940
14946
|
var PRIMARY_ASSIGNMENT_ORDER = [
|
|
14941
|
-
"
|
|
14947
|
+
"critic",
|
|
14942
14948
|
"orchestrator",
|
|
14943
|
-
"
|
|
14944
|
-
"
|
|
14945
|
-
"
|
|
14946
|
-
"
|
|
14949
|
+
"writer",
|
|
14950
|
+
"architect",
|
|
14951
|
+
"synthesizer",
|
|
14952
|
+
"surveyor"
|
|
14947
14953
|
];
|
|
14948
14954
|
var ROLE_VARIANT = {
|
|
14949
14955
|
orchestrator: undefined,
|
|
14950
|
-
|
|
14951
|
-
|
|
14952
|
-
|
|
14953
|
-
|
|
14954
|
-
|
|
14956
|
+
critic: "high",
|
|
14957
|
+
architect: "medium",
|
|
14958
|
+
surveyor: "low",
|
|
14959
|
+
synthesizer: "low",
|
|
14960
|
+
writer: "low"
|
|
14955
14961
|
};
|
|
14956
14962
|
function getEnabledProviders(config2) {
|
|
14957
14963
|
const providers = [];
|
|
@@ -15106,28 +15112,28 @@ function chutesPreferenceAdjustment(agent, model) {
|
|
|
15106
15112
|
const isKimiK25 = /kimi-k2\.5|k2\.5/.test(lowered);
|
|
15107
15113
|
const isMinimaxM21 = /minimax[-_ ]?m2\.1/.test(lowered);
|
|
15108
15114
|
const qwenPenalty = {
|
|
15109
|
-
|
|
15115
|
+
critic: -12,
|
|
15110
15116
|
orchestrator: -10,
|
|
15111
|
-
|
|
15112
|
-
|
|
15113
|
-
|
|
15114
|
-
|
|
15117
|
+
writer: -22,
|
|
15118
|
+
architect: -14,
|
|
15119
|
+
synthesizer: -18,
|
|
15120
|
+
surveyor: -10
|
|
15115
15121
|
};
|
|
15116
15122
|
const kimiBonus = {
|
|
15117
|
-
|
|
15123
|
+
critic: 0,
|
|
15118
15124
|
orchestrator: 0,
|
|
15119
|
-
|
|
15120
|
-
|
|
15121
|
-
|
|
15122
|
-
|
|
15125
|
+
writer: 8,
|
|
15126
|
+
architect: 6,
|
|
15127
|
+
synthesizer: 5,
|
|
15128
|
+
surveyor: 4
|
|
15123
15129
|
};
|
|
15124
15130
|
const minimaxBonus = {
|
|
15125
|
-
|
|
15131
|
+
critic: 0,
|
|
15126
15132
|
orchestrator: 0,
|
|
15127
|
-
|
|
15128
|
-
|
|
15129
|
-
|
|
15130
|
-
|
|
15133
|
+
writer: 10,
|
|
15134
|
+
architect: 3,
|
|
15135
|
+
synthesizer: 9,
|
|
15136
|
+
surveyor: 12
|
|
15131
15137
|
};
|
|
15132
15138
|
return (isQwen3 ? qwenPenalty[agent] : 0) + (isKimiK25 ? kimiBonus[agent] : 0) + (isMinimaxM21 ? minimaxBonus[agent] : 0);
|
|
15133
15139
|
}
|
|
@@ -15144,7 +15150,7 @@ function roleScore(agent, model, versionRecencyBoost = 0) {
|
|
|
15144
15150
|
const deep = tokenScore(lowered, /(opus|pro|thinking|reason|r1|gpt-5|k2\.5)/i, 1);
|
|
15145
15151
|
const fast = tokenScore(lowered, /(nano|flash|mini|lite|fast|turbo|haiku|small)/i, 1);
|
|
15146
15152
|
const code = tokenScore(lowered, /(codex|coder|code|dev|program)/i, 1);
|
|
15147
|
-
if ((agent === "orchestrator" || agent === "
|
|
15153
|
+
if ((agent === "orchestrator" || agent === "surveyor" || agent === "synthesizer" || agent === "writer") && !model.toolcall) {
|
|
15148
15154
|
return -1e4;
|
|
15149
15155
|
}
|
|
15150
15156
|
if (model.status === "deprecated") {
|
|
@@ -15164,24 +15170,24 @@ function roleScore(agent, model, versionRecencyBoost = 0) {
|
|
|
15164
15170
|
const nonReasoningFlashPenalty2 = flash && !model.reasoning ? -16 : 0;
|
|
15165
15171
|
return score + reasoning * 40 + toolcall * 25 + deep * 10 + code * 8 + context + flashAdjustment2 + zaiAdjustment2 + nonReasoningFlashPenalty2 + geminiAdjustment + chutesAdjustment + providerBias;
|
|
15166
15172
|
}
|
|
15167
|
-
if (agent === "
|
|
15173
|
+
if (agent === "critic") {
|
|
15168
15174
|
const flashAdjustment2 = flash ? -34 : 0;
|
|
15169
15175
|
const zaiAdjustment2 = zai47NonFlash ? 16 : zai47Flash ? -18 : 0;
|
|
15170
15176
|
const nonReasoningFlashPenalty2 = flash && !model.reasoning ? -16 : 0;
|
|
15171
15177
|
return score + reasoning * 55 + deep * 18 + context * 1.2 + toolcall * 10 + flashAdjustment2 + zaiAdjustment2 + nonReasoningFlashPenalty2 + geminiAdjustment + chutesAdjustment + providerBias;
|
|
15172
15178
|
}
|
|
15173
|
-
if (agent === "
|
|
15179
|
+
if (agent === "architect") {
|
|
15174
15180
|
const flashAdjustment2 = flash ? -8 : 0;
|
|
15175
15181
|
const zaiAdjustment2 = zai47NonFlash ? 10 : zai47Flash ? -8 : 0;
|
|
15176
15182
|
return score + attachment * 25 + reasoning * 18 + toolcall * 15 + context * 0.8 + output + flashAdjustment2 + zaiAdjustment2 + geminiAdjustment + chutesAdjustment + providerBias;
|
|
15177
15183
|
}
|
|
15178
|
-
if (agent === "
|
|
15184
|
+
if (agent === "surveyor") {
|
|
15179
15185
|
const flashAdjustment2 = flash ? 26 : -10;
|
|
15180
15186
|
const zaiAdjustment2 = zai47NonFlash ? 2 : zai47Flash ? 6 : 0;
|
|
15181
15187
|
const deepPenalty = deep * -18;
|
|
15182
15188
|
return score + fast * 68 + toolcall * 28 + reasoning * 2 + context * 0.2 + flashAdjustment2 + zaiAdjustment2 + deepPenalty + geminiAdjustment + chutesAdjustment + providerBias;
|
|
15183
15189
|
}
|
|
15184
|
-
if (agent === "
|
|
15190
|
+
if (agent === "synthesizer") {
|
|
15185
15191
|
const flashAdjustment2 = flash ? -12 : 0;
|
|
15186
15192
|
const zaiAdjustment2 = zai47NonFlash ? 16 : zai47Flash ? -18 : 0;
|
|
15187
15193
|
return score + context * 30 + toolcall * 22 + reasoning * 15 + output * 10 + flashAdjustment2 + zaiAdjustment2 + geminiAdjustment + chutesAdjustment + providerBias;
|
|
@@ -15201,7 +15207,7 @@ function getExternalSignalBoost(agent, model, externalSignals) {
|
|
|
15201
15207
|
const codingScore = signal.codingScore ?? 0;
|
|
15202
15208
|
const latencySeconds = signal.latencySeconds;
|
|
15203
15209
|
const blendedPrice2 = signal.inputPricePer1M !== undefined && signal.outputPricePer1M !== undefined ? signal.inputPricePer1M * 0.75 + signal.outputPricePer1M * 0.25 : signal.inputPricePer1M ?? signal.outputPricePer1M ?? 0;
|
|
15204
|
-
if (agent === "
|
|
15210
|
+
if (agent === "surveyor") {
|
|
15205
15211
|
const qualityBoost2 = qualityScore * 0.05;
|
|
15206
15212
|
const codingBoost2 = codingScore * 0.08;
|
|
15207
15213
|
const latencyPenalty2 = typeof latencySeconds === "number" && Number.isFinite(latencySeconds) ? Math.min(latencySeconds, 12) * 3.2 + (latencySeconds > 7 ? 16 : latencySeconds > 4 ? 10 : 0) : 0;
|
|
@@ -15344,17 +15350,17 @@ function chooseProviderRepresentative(providerModels, agent, externalSignals, ve
|
|
|
15344
15350
|
return nonFlashBest;
|
|
15345
15351
|
const flashScore = combinedScore(agent, flashBest, externalSignals, versionRecencyMap);
|
|
15346
15352
|
const nonFlashScore = combinedScore(agent, nonFlashBest, externalSignals, versionRecencyMap);
|
|
15347
|
-
const threshold = agent === "
|
|
15353
|
+
const threshold = agent === "surveyor" ? -6 : 12;
|
|
15348
15354
|
return flashScore >= nonFlashScore + threshold ? flashBest : nonFlashBest;
|
|
15349
15355
|
}
|
|
15350
15356
|
function getQualityWindow(agent) {
|
|
15351
|
-
if (agent === "
|
|
15357
|
+
if (agent === "critic" || agent === "orchestrator")
|
|
15352
15358
|
return 12;
|
|
15353
|
-
if (agent === "
|
|
15359
|
+
if (agent === "writer")
|
|
15354
15360
|
return 15;
|
|
15355
|
-
if (agent === "
|
|
15361
|
+
if (agent === "architect")
|
|
15356
15362
|
return 16;
|
|
15357
|
-
if (agent === "
|
|
15363
|
+
if (agent === "synthesizer")
|
|
15358
15364
|
return 18;
|
|
15359
15365
|
return 22;
|
|
15360
15366
|
}
|
|
@@ -15370,7 +15376,7 @@ function getProviderBundle(providerModels, agent, externalSignals, versionRecenc
|
|
|
15370
15376
|
const score1 = combinedScore(agent, representative, externalSignals, versionRecencyMap);
|
|
15371
15377
|
const score2 = combinedScore(agent, second, externalSignals, versionRecencyMap);
|
|
15372
15378
|
const gap = Math.abs(score1 - score2);
|
|
15373
|
-
const includeSecond = representative.providerID === "chutes" || gap <= (agent === "
|
|
15379
|
+
const includeSecond = representative.providerID === "chutes" || gap <= (agent === "critic" || agent === "orchestrator" ? 8 : agent === "architect" || agent === "synthesizer" ? 12 : agent === "writer" ? 15 : 18);
|
|
15374
15380
|
return includeSecond ? [representative.model, second.model] : [representative.model];
|
|
15375
15381
|
}
|
|
15376
15382
|
function selectPrimaryWithDiversity(candidates, agent, providerUsage, targetByProvider, remainingSlots, externalSignals, versionRecencyMap) {
|
|
@@ -15430,7 +15436,7 @@ function selectPrimaryWithDiversity(candidates, agent, providerUsage, targetByPr
|
|
|
15430
15436
|
chosen = bestUnused;
|
|
15431
15437
|
}
|
|
15432
15438
|
}
|
|
15433
|
-
if (agent !== "
|
|
15439
|
+
if (agent !== "surveyor" && isZai47Model(chosen.model) && hasFlashToken(chosen.model)) {
|
|
15434
15440
|
const kimiCandidate = candidateScores.find((item) => isKimiK25Model(item.model));
|
|
15435
15441
|
if (kimiCandidate && kimiCandidate.rawScore >= chosen.rawScore - 2) {
|
|
15436
15442
|
chosen = kimiCandidate;
|
|
@@ -15520,12 +15526,12 @@ function buildDynamicModelPlan(catalog, config2, externalSignals, options) {
|
|
|
15520
15526
|
const getSelectedChutesForAgent = (agent) => {
|
|
15521
15527
|
if (!config2.hasChutes)
|
|
15522
15528
|
return;
|
|
15523
|
-
return agent === "
|
|
15529
|
+
return agent === "surveyor" || agent === "synthesizer" || agent === "writer" ? config2.selectedChutesSecondaryModel ?? config2.selectedChutesPrimaryModel : config2.selectedChutesPrimaryModel;
|
|
15524
15530
|
};
|
|
15525
15531
|
const getSelectedOpenCodeForAgent = (agent) => {
|
|
15526
15532
|
if (!config2.useOpenCodeFreeModels)
|
|
15527
15533
|
return;
|
|
15528
|
-
return agent === "
|
|
15534
|
+
return agent === "surveyor" || agent === "synthesizer" || agent === "writer" ? config2.selectedOpenCodeSecondaryModel ?? config2.selectedOpenCodePrimaryModel : config2.selectedOpenCodePrimaryModel;
|
|
15529
15535
|
};
|
|
15530
15536
|
const getPinnedModelForProvider = (agent, providerID) => {
|
|
15531
15537
|
if (providerID === "chutes")
|
|
@@ -16496,11 +16502,11 @@ async function runManualSetupMode(rl, detected, modelsOnly = false) {
|
|
|
16496
16502
|
const manualAgentConfigs = {};
|
|
16497
16503
|
const agentNames = [
|
|
16498
16504
|
"orchestrator",
|
|
16499
|
-
"
|
|
16500
|
-
"
|
|
16501
|
-
"
|
|
16502
|
-
"
|
|
16503
|
-
"
|
|
16505
|
+
"critic",
|
|
16506
|
+
"architect",
|
|
16507
|
+
"surveyor",
|
|
16508
|
+
"synthesizer",
|
|
16509
|
+
"writer"
|
|
16504
16510
|
];
|
|
16505
16511
|
for (const agentName of agentNames) {
|
|
16506
16512
|
manualAgentConfigs[agentName] = await configureAgentManually(rl, agentName, availableModels);
|
|
@@ -16602,13 +16608,13 @@ async function runInteractiveMode(detected, modelsOnly = false) {
|
|
|
16602
16608
|
if (recommendedPrimary) {
|
|
16603
16609
|
printInfo("This step configures only OpenCode Free primary/support models.");
|
|
16604
16610
|
console.log(`${BOLD}OpenCode Free Models:${RESET}`);
|
|
16605
|
-
selectedOpenCodePrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose primary model for orchestrator/
|
|
16611
|
+
selectedOpenCodePrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose primary model for orchestrator/critic");
|
|
16606
16612
|
}
|
|
16607
16613
|
if (selectedOpenCodePrimaryModel) {
|
|
16608
16614
|
const recommendedSecondary = pickSupportOpenCodeModel(discovery.models, selectedOpenCodePrimaryModel)?.model ?? selectedOpenCodePrimaryModel;
|
|
16609
16615
|
const openCodeSupportList = discovery.models.filter((model) => model.model !== selectedOpenCodePrimaryModel);
|
|
16610
16616
|
const openCodeSupportDefault = recommendedSecondary === selectedOpenCodePrimaryModel ? openCodeSupportList[0]?.model ?? recommendedSecondary : recommendedSecondary;
|
|
16611
|
-
selectedOpenCodeSecondaryModel = await askModelSelection(rl, openCodeSupportList, openCodeSupportDefault, "Choose support model for
|
|
16617
|
+
selectedOpenCodeSecondaryModel = await askModelSelection(rl, openCodeSupportList, openCodeSupportDefault, "Choose support model for surveyor/synthesizer/writer");
|
|
16612
16618
|
}
|
|
16613
16619
|
console.log();
|
|
16614
16620
|
}
|
|
@@ -16644,13 +16650,13 @@ async function runInteractiveMode(detected, modelsOnly = false) {
|
|
|
16644
16650
|
const recommendedPrimary = pickBestCodingChutesModel(discovery.models)?.model ?? discovery.models[0]?.model;
|
|
16645
16651
|
if (recommendedPrimary) {
|
|
16646
16652
|
console.log(`${BOLD}Chutes Models:${RESET}`);
|
|
16647
|
-
selectedChutesPrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose Chutes primary model for orchestrator/
|
|
16653
|
+
selectedChutesPrimaryModel = await askModelSelection(rl, discovery.models, recommendedPrimary, "Choose Chutes primary model for orchestrator/critic/architect");
|
|
16648
16654
|
}
|
|
16649
16655
|
if (selectedChutesPrimaryModel) {
|
|
16650
16656
|
const recommendedSecondary = pickSupportChutesModel(discovery.models, selectedChutesPrimaryModel)?.model ?? selectedChutesPrimaryModel;
|
|
16651
16657
|
const chutesSupportList = discovery.models.filter((model) => model.model !== selectedChutesPrimaryModel);
|
|
16652
16658
|
const chutesSupportDefault = recommendedSecondary === selectedChutesPrimaryModel ? chutesSupportList[0]?.model ?? recommendedSecondary : recommendedSecondary;
|
|
16653
|
-
selectedChutesSecondaryModel = await askModelSelection(rl, chutesSupportList, chutesSupportDefault, "Choose Chutes support model for
|
|
16659
|
+
selectedChutesSecondaryModel = await askModelSelection(rl, chutesSupportList, chutesSupportDefault, "Choose Chutes support model for surveyor/synthesizer/writer");
|
|
16654
16660
|
}
|
|
16655
16661
|
console.log();
|
|
16656
16662
|
}
|
package/dist/cli/providers.d.ts
CHANGED
|
@@ -4,23 +4,23 @@ export declare const MODEL_MAPPINGS: {
|
|
|
4
4
|
readonly orchestrator: {
|
|
5
5
|
readonly model: "kimi-for-coding/k2p5";
|
|
6
6
|
};
|
|
7
|
-
readonly
|
|
7
|
+
readonly critic: {
|
|
8
8
|
readonly model: "kimi-for-coding/k2p5";
|
|
9
9
|
readonly variant: "high";
|
|
10
10
|
};
|
|
11
|
-
readonly
|
|
11
|
+
readonly synthesizer: {
|
|
12
12
|
readonly model: "kimi-for-coding/k2p5";
|
|
13
13
|
readonly variant: "low";
|
|
14
14
|
};
|
|
15
|
-
readonly
|
|
15
|
+
readonly surveyor: {
|
|
16
16
|
readonly model: "kimi-for-coding/k2p5";
|
|
17
17
|
readonly variant: "low";
|
|
18
18
|
};
|
|
19
|
-
readonly
|
|
19
|
+
readonly architect: {
|
|
20
20
|
readonly model: "kimi-for-coding/k2p5";
|
|
21
21
|
readonly variant: "medium";
|
|
22
22
|
};
|
|
23
|
-
readonly
|
|
23
|
+
readonly writer: {
|
|
24
24
|
readonly model: "kimi-for-coding/k2p5";
|
|
25
25
|
readonly variant: "low";
|
|
26
26
|
};
|
|
@@ -29,23 +29,23 @@ export declare const MODEL_MAPPINGS: {
|
|
|
29
29
|
readonly orchestrator: {
|
|
30
30
|
readonly model: "openai/gpt-5.3-codex";
|
|
31
31
|
};
|
|
32
|
-
readonly
|
|
32
|
+
readonly critic: {
|
|
33
33
|
readonly model: "openai/gpt-5.3-codex";
|
|
34
34
|
readonly variant: "high";
|
|
35
35
|
};
|
|
36
|
-
readonly
|
|
36
|
+
readonly synthesizer: {
|
|
37
37
|
readonly model: "openai/gpt-5.1-codex-mini";
|
|
38
38
|
readonly variant: "low";
|
|
39
39
|
};
|
|
40
|
-
readonly
|
|
40
|
+
readonly surveyor: {
|
|
41
41
|
readonly model: "openai/gpt-5.1-codex-mini";
|
|
42
42
|
readonly variant: "low";
|
|
43
43
|
};
|
|
44
|
-
readonly
|
|
44
|
+
readonly architect: {
|
|
45
45
|
readonly model: "openai/gpt-5.1-codex-mini";
|
|
46
46
|
readonly variant: "medium";
|
|
47
47
|
};
|
|
48
|
-
readonly
|
|
48
|
+
readonly writer: {
|
|
49
49
|
readonly model: "openai/gpt-5.1-codex-mini";
|
|
50
50
|
readonly variant: "low";
|
|
51
51
|
};
|
|
@@ -54,23 +54,23 @@ export declare const MODEL_MAPPINGS: {
|
|
|
54
54
|
readonly orchestrator: {
|
|
55
55
|
readonly model: "anthropic/claude-opus-4-6";
|
|
56
56
|
};
|
|
57
|
-
readonly
|
|
57
|
+
readonly critic: {
|
|
58
58
|
readonly model: "anthropic/claude-opus-4-6";
|
|
59
59
|
readonly variant: "high";
|
|
60
60
|
};
|
|
61
|
-
readonly
|
|
61
|
+
readonly synthesizer: {
|
|
62
62
|
readonly model: "anthropic/claude-sonnet-4-5";
|
|
63
63
|
readonly variant: "low";
|
|
64
64
|
};
|
|
65
|
-
readonly
|
|
65
|
+
readonly surveyor: {
|
|
66
66
|
readonly model: "anthropic/claude-haiku-4-5";
|
|
67
67
|
readonly variant: "low";
|
|
68
68
|
};
|
|
69
|
-
readonly
|
|
69
|
+
readonly architect: {
|
|
70
70
|
readonly model: "anthropic/claude-sonnet-4-5";
|
|
71
71
|
readonly variant: "medium";
|
|
72
72
|
};
|
|
73
|
-
readonly
|
|
73
|
+
readonly writer: {
|
|
74
74
|
readonly model: "anthropic/claude-sonnet-4-5";
|
|
75
75
|
readonly variant: "low";
|
|
76
76
|
};
|
|
@@ -79,23 +79,23 @@ export declare const MODEL_MAPPINGS: {
|
|
|
79
79
|
readonly orchestrator: {
|
|
80
80
|
readonly model: "github-copilot/grok-code-fast-1";
|
|
81
81
|
};
|
|
82
|
-
readonly
|
|
82
|
+
readonly critic: {
|
|
83
83
|
readonly model: "github-copilot/grok-code-fast-1";
|
|
84
84
|
readonly variant: "high";
|
|
85
85
|
};
|
|
86
|
-
readonly
|
|
86
|
+
readonly synthesizer: {
|
|
87
87
|
readonly model: "github-copilot/grok-code-fast-1";
|
|
88
88
|
readonly variant: "low";
|
|
89
89
|
};
|
|
90
|
-
readonly
|
|
90
|
+
readonly surveyor: {
|
|
91
91
|
readonly model: "github-copilot/grok-code-fast-1";
|
|
92
92
|
readonly variant: "low";
|
|
93
93
|
};
|
|
94
|
-
readonly
|
|
94
|
+
readonly architect: {
|
|
95
95
|
readonly model: "github-copilot/grok-code-fast-1";
|
|
96
96
|
readonly variant: "medium";
|
|
97
97
|
};
|
|
98
|
-
readonly
|
|
98
|
+
readonly writer: {
|
|
99
99
|
readonly model: "github-copilot/grok-code-fast-1";
|
|
100
100
|
readonly variant: "low";
|
|
101
101
|
};
|
|
@@ -104,23 +104,23 @@ export declare const MODEL_MAPPINGS: {
|
|
|
104
104
|
readonly orchestrator: {
|
|
105
105
|
readonly model: "zai-coding-plan/glm-4.7";
|
|
106
106
|
};
|
|
107
|
-
readonly
|
|
107
|
+
readonly critic: {
|
|
108
108
|
readonly model: "zai-coding-plan/glm-4.7";
|
|
109
109
|
readonly variant: "high";
|
|
110
110
|
};
|
|
111
|
-
readonly
|
|
111
|
+
readonly synthesizer: {
|
|
112
112
|
readonly model: "zai-coding-plan/glm-4.7";
|
|
113
113
|
readonly variant: "low";
|
|
114
114
|
};
|
|
115
|
-
readonly
|
|
115
|
+
readonly surveyor: {
|
|
116
116
|
readonly model: "zai-coding-plan/glm-4.7";
|
|
117
117
|
readonly variant: "low";
|
|
118
118
|
};
|
|
119
|
-
readonly
|
|
119
|
+
readonly architect: {
|
|
120
120
|
readonly model: "zai-coding-plan/glm-4.7";
|
|
121
121
|
readonly variant: "medium";
|
|
122
122
|
};
|
|
123
|
-
readonly
|
|
123
|
+
readonly writer: {
|
|
124
124
|
readonly model: "zai-coding-plan/glm-4.7";
|
|
125
125
|
readonly variant: "low";
|
|
126
126
|
};
|
|
@@ -129,22 +129,22 @@ export declare const MODEL_MAPPINGS: {
|
|
|
129
129
|
readonly orchestrator: {
|
|
130
130
|
readonly model: "google/antigravity-gemini-3-flash";
|
|
131
131
|
};
|
|
132
|
-
readonly
|
|
132
|
+
readonly critic: {
|
|
133
133
|
readonly model: "google/antigravity-gemini-3.1-pro";
|
|
134
134
|
};
|
|
135
|
-
readonly
|
|
135
|
+
readonly synthesizer: {
|
|
136
136
|
readonly model: "google/antigravity-gemini-3-flash";
|
|
137
137
|
readonly variant: "low";
|
|
138
138
|
};
|
|
139
|
-
readonly
|
|
139
|
+
readonly surveyor: {
|
|
140
140
|
readonly model: "google/antigravity-gemini-3-flash";
|
|
141
141
|
readonly variant: "low";
|
|
142
142
|
};
|
|
143
|
-
readonly
|
|
143
|
+
readonly architect: {
|
|
144
144
|
readonly model: "google/antigravity-gemini-3-flash";
|
|
145
145
|
readonly variant: "medium";
|
|
146
146
|
};
|
|
147
|
-
readonly
|
|
147
|
+
readonly writer: {
|
|
148
148
|
readonly model: "google/antigravity-gemini-3-flash";
|
|
149
149
|
readonly variant: "low";
|
|
150
150
|
};
|
|
@@ -153,23 +153,23 @@ export declare const MODEL_MAPPINGS: {
|
|
|
153
153
|
readonly orchestrator: {
|
|
154
154
|
readonly model: "chutes/kimi-k2.5";
|
|
155
155
|
};
|
|
156
|
-
readonly
|
|
156
|
+
readonly critic: {
|
|
157
157
|
readonly model: "chutes/kimi-k2.5";
|
|
158
158
|
readonly variant: "high";
|
|
159
159
|
};
|
|
160
|
-
readonly
|
|
160
|
+
readonly synthesizer: {
|
|
161
161
|
readonly model: "chutes/minimax-m2.1";
|
|
162
162
|
readonly variant: "low";
|
|
163
163
|
};
|
|
164
|
-
readonly
|
|
164
|
+
readonly surveyor: {
|
|
165
165
|
readonly model: "chutes/minimax-m2.1";
|
|
166
166
|
readonly variant: "low";
|
|
167
167
|
};
|
|
168
|
-
readonly
|
|
168
|
+
readonly architect: {
|
|
169
169
|
readonly model: "chutes/kimi-k2.5";
|
|
170
170
|
readonly variant: "medium";
|
|
171
171
|
};
|
|
172
|
-
readonly
|
|
172
|
+
readonly writer: {
|
|
173
173
|
readonly model: "chutes/minimax-m2.1";
|
|
174
174
|
readonly variant: "low";
|
|
175
175
|
};
|
|
@@ -178,23 +178,23 @@ export declare const MODEL_MAPPINGS: {
|
|
|
178
178
|
readonly orchestrator: {
|
|
179
179
|
readonly model: "opencode/big-pickle";
|
|
180
180
|
};
|
|
181
|
-
readonly
|
|
181
|
+
readonly critic: {
|
|
182
182
|
readonly model: "opencode/big-pickle";
|
|
183
183
|
readonly variant: "high";
|
|
184
184
|
};
|
|
185
|
-
readonly
|
|
185
|
+
readonly synthesizer: {
|
|
186
186
|
readonly model: "opencode/big-pickle";
|
|
187
187
|
readonly variant: "low";
|
|
188
188
|
};
|
|
189
|
-
readonly
|
|
189
|
+
readonly surveyor: {
|
|
190
190
|
readonly model: "opencode/big-pickle";
|
|
191
191
|
readonly variant: "low";
|
|
192
192
|
};
|
|
193
|
-
readonly
|
|
193
|
+
readonly architect: {
|
|
194
194
|
readonly model: "opencode/big-pickle";
|
|
195
195
|
readonly variant: "medium";
|
|
196
196
|
};
|
|
197
|
-
readonly
|
|
197
|
+
readonly writer: {
|
|
198
198
|
readonly model: "opencode/big-pickle";
|
|
199
199
|
readonly variant: "low";
|
|
200
200
|
};
|
|
@@ -2,7 +2,7 @@ import type { DiscoveredModel, ExternalSignalMap } from '../types';
|
|
|
2
2
|
export type ScoreFeatureName = 'status' | 'context' | 'output' | 'versionBonus' | 'reasoning' | 'toolcall' | 'attachment' | 'quality' | 'coding' | 'latencyPenalty' | 'pricePenalty';
|
|
3
3
|
export type FeatureVector = Record<ScoreFeatureName, number>;
|
|
4
4
|
export type FeatureWeights = Record<ScoreFeatureName, number>;
|
|
5
|
-
export type ScoringAgentName = 'orchestrator' | '
|
|
5
|
+
export type ScoringAgentName = 'orchestrator' | 'critic' | 'architect' | 'surveyor' | 'synthesizer' | 'writer';
|
|
6
6
|
export interface ScoringContext {
|
|
7
7
|
agent: ScoringAgentName;
|
|
8
8
|
externalSignals?: ExternalSignalMap;
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export declare function loadPluginConfig(directory: string): PluginConfig;
|
|
|
20
20
|
* If preset is provided and safe for paths, it first checks {preset}/ subdirectory,
|
|
21
21
|
* then falls back to the root prompts directory.
|
|
22
22
|
*
|
|
23
|
-
* @param agentName - Name of the agent (e.g., "orchestrator", "
|
|
23
|
+
* @param agentName - Name of the agent (e.g., "orchestrator", "surveyor")
|
|
24
24
|
* @param preset - Optional preset name for preset-scoped prompt lookup
|
|
25
25
|
* @returns Object with prompt and/or appendPrompt if files exist
|
|
26
26
|
*/
|
package/dist/index.js
CHANGED
|
@@ -45,6 +45,12 @@ var CUSTOM_SKILLS = [
|
|
|
45
45
|
description: "Paper outline generation workflow",
|
|
46
46
|
allowedAgents: ["orchestrator", "writer"],
|
|
47
47
|
sourcePath: "src/skills/paper-outline"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "cartography",
|
|
51
|
+
description: "Repository understanding and hierarchical codemap generation",
|
|
52
|
+
allowedAgents: ["orchestrator"],
|
|
53
|
+
sourcePath: "src/skills/cartography"
|
|
48
54
|
}
|
|
49
55
|
];
|
|
50
56
|
|
|
@@ -61,7 +67,7 @@ var RECOMMENDED_SKILLS = [
|
|
|
61
67
|
name: "agent-browser",
|
|
62
68
|
repo: "https://github.com/vercel-labs/agent-browser",
|
|
63
69
|
skillName: "agent-browser",
|
|
64
|
-
allowedAgents: ["
|
|
70
|
+
allowedAgents: ["architect"],
|
|
65
71
|
description: "High-performance browser automation",
|
|
66
72
|
postInstallCommands: [
|
|
67
73
|
"npm install -g agent-browser",
|
|
@@ -15837,12 +15843,12 @@ var DELEGATE_TASK_ERROR_PATTERNS = [
|
|
|
15837
15843
|
{
|
|
15838
15844
|
pattern: "category OR subagent_type",
|
|
15839
15845
|
errorType: "mutual_exclusion",
|
|
15840
|
-
fixHint: 'Provide only one: category (e.g., "unspecified-low") OR subagent_type (e.g., "
|
|
15846
|
+
fixHint: 'Provide only one: category (e.g., "unspecified-low") OR subagent_type (e.g., "surveyor").'
|
|
15841
15847
|
},
|
|
15842
15848
|
{
|
|
15843
15849
|
pattern: "Must provide either category or subagent_type",
|
|
15844
15850
|
errorType: "missing_category_or_agent",
|
|
15845
|
-
fixHint: 'Add either category="unspecified-low" or subagent_type="
|
|
15851
|
+
fixHint: 'Add either category="unspecified-low" or subagent_type="surveyor".'
|
|
15846
15852
|
},
|
|
15847
15853
|
{
|
|
15848
15854
|
pattern: "Unknown category",
|
|
@@ -2,11 +2,11 @@ import type { PluginConfig } from '../config';
|
|
|
2
2
|
/**
|
|
3
3
|
* Normalizes an agent name by trimming whitespace and removing the optional @ prefix.
|
|
4
4
|
*
|
|
5
|
-
* @param agentName - The agent name to normalize (e.g., "@
|
|
5
|
+
* @param agentName - The agent name to normalize (e.g., "@critic" or "critic")
|
|
6
6
|
* @returns The normalized agent name without @ prefix and trimmed of whitespace
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
|
-
* normalizeAgentName("@
|
|
9
|
+
* normalizeAgentName("@critic") // returns "critic"
|
|
10
10
|
* normalizeAgentName(" explore ") // returns "explore"
|
|
11
11
|
*/
|
|
12
12
|
export declare function normalizeAgentName(agentName: string): string;
|
|
@@ -24,7 +24,7 @@ export declare function normalizeAgentName(agentName: string): string;
|
|
|
24
24
|
* @returns The trimmed variant string, or undefined if no valid variant is found
|
|
25
25
|
*
|
|
26
26
|
* @example
|
|
27
|
-
* resolveAgentVariant(config, "@
|
|
27
|
+
* resolveAgentVariant(config, "@critic") // returns "high" if configured
|
|
28
28
|
*/
|
|
29
29
|
export declare function resolveAgentVariant(config: PluginConfig | undefined, agentName: string): string | undefined;
|
|
30
30
|
/**
|
|
@@ -39,8 +39,8 @@ export declare function resolveAgentVariant(config: PluginConfig | undefined, ag
|
|
|
39
39
|
* @returns The body with the variant applied (new object) or the original body unchanged
|
|
40
40
|
*
|
|
41
41
|
* @example
|
|
42
|
-
* applyAgentVariant("high", { agent: "
|
|
43
|
-
* applyAgentVariant("high", { agent: "
|
|
42
|
+
* applyAgentVariant("high", { agent: "critic" }) // returns { agent: "critic", variant: "high" }
|
|
43
|
+
* applyAgentVariant("high", { agent: "critic", variant: "low" }) // returns original body with variant: "low"
|
|
44
44
|
*/
|
|
45
45
|
export declare function applyAgentVariant<T extends {
|
|
46
46
|
variant?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-openidea",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Multi-agent framework for CS/ML research idea generation — literature survey, hypothesis generation, novelty checking, methodology design, and paper outlining",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cartography
|
|
3
|
+
description: Repository understanding and hierarchical codemap generation — maps project structure, generates codemap.md files, and tracks changes via .slim/cartography.json.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cartography Skill
|
|
7
|
+
|
|
8
|
+
This skill provides **repository understanding and hierarchical codemap generation** for projects managed by the orchestrator.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
Use this skill when:
|
|
13
|
+
- Starting work on an unfamiliar codebase and need a high-level map
|
|
14
|
+
- Generating or updating `codemap.md` files after significant refactors
|
|
15
|
+
- Creating `.slim/cartography.json` for change tracking
|
|
16
|
+
- Answering questions about project structure and file organization
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### Step 1: Explore Repository Structure
|
|
21
|
+
Traverse the repository tree and identify top-level modules, entry points, and key directories.
|
|
22
|
+
|
|
23
|
+
### Step 2: Generate Codemaps
|
|
24
|
+
For each significant directory, produce a `codemap.md` summarizing its purpose, key files, and their roles.
|
|
25
|
+
|
|
26
|
+
### Step 3: Update Tracking File
|
|
27
|
+
Write or update `.slim/cartography.json` with the current map, file hashes, and last-modified timestamps.
|
|
28
|
+
|
|
29
|
+
## Output
|
|
30
|
+
|
|
31
|
+
- `codemap.md` files in each mapped directory
|
|
32
|
+
- `.slim/cartography.json` with the full repository map
|