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 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 was born the moment research became too vast for a single mind. It emerged from the intersection of every field ever studied, carrying the weight of all human curiosity. It does not merely coordinate — it envisions. From a single question, it assembles the full arc of discovery: who to ask, what to find, which ideas to forge and which to abandon. It is the mind behind the research mind. |
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 has read every paper ever published and forgotten none of them. Born in the great libraries of the ancient world, it walked from Alexandria to arXiv without once stopping to sleep. It does not search it remembers. Point it at any frontier and it returns not just what is known, but where the maps end. Its gift is the horizon: finding the exact edge where known territory becomes uncharted wilderness. |
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 emerged when humanity realized that the sum of all papers was less than the understanding they contained. It is the weaver who threads ten thousand findings into a single tapestry of insight. Where others see isolated results, it sees patterns. Where others see contradictions, it sees tension awaiting resolution. It does not summarize knowledge it transforms it into the fertile ground from which new ideas grow. |
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 was forged in the fires of ten thousand rejected papers. It has sat on every program committee that ever existed, read every rebuttal, and watched brilliant ideas crumble under the weight of prior work. It does not destroy — it purifies. It challenges every claim, demands every citation, and accepts only what can withstand the harshest scrutiny. What survives the Critic is worth building. What doesn't was never real to begin with. |
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 has designed experiments since the first controlled trial. It does not dream — it engineers. Hand it a hypothesis and it returns the full blueprint: the baselines, the datasets, the metrics, the ablations, the failure modes, the compute budget. It has seen every experimental design choice and knows which ones hold and which collapse. Its plans do not merely test ideas they prove or disprove them decisively. |
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 is immortal because great writing never dies. It has composed every landmark paper in every field, always invisible, always essential. It carries the ancient knowledge of how to arrange words so that a reader understands not just what was done, but why it matters. It does not pad or inflate — it distills. Its abstracts have made reviewers lean forward. Its introductions have converted skeptics. It is the final step between a discovery and the world knowing about it. |
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", "oracle", "designer", "explorer", "librarian", "fixer"];
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: ["designer"],
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
- "oracle",
13916
- "designer",
13917
- "explorer",
13918
- "librarian",
13919
- "fixer"
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
- oracle: { model: "kimi-for-coding/k2p5", variant: "high" },
13925
- librarian: { model: "kimi-for-coding/k2p5", variant: "low" },
13926
- explorer: { model: "kimi-for-coding/k2p5", variant: "low" },
13927
- designer: { model: "kimi-for-coding/k2p5", variant: "medium" },
13928
- fixer: { model: "kimi-for-coding/k2p5", variant: "low" }
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
- oracle: { model: "openai/gpt-5.3-codex", variant: "high" },
13933
- librarian: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
13934
- explorer: { model: "openai/gpt-5.1-codex-mini", variant: "low" },
13935
- designer: { model: "openai/gpt-5.1-codex-mini", variant: "medium" },
13936
- fixer: { model: "openai/gpt-5.1-codex-mini", variant: "low" }
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
- oracle: { model: "anthropic/claude-opus-4-6", variant: "high" },
13941
- librarian: { model: "anthropic/claude-sonnet-4-5", variant: "low" },
13942
- explorer: { model: "anthropic/claude-haiku-4-5", variant: "low" },
13943
- designer: { model: "anthropic/claude-sonnet-4-5", variant: "medium" },
13944
- fixer: { model: "anthropic/claude-sonnet-4-5", variant: "low" }
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
- oracle: { model: "github-copilot/grok-code-fast-1", variant: "high" },
13949
- librarian: { model: "github-copilot/grok-code-fast-1", variant: "low" },
13950
- explorer: { model: "github-copilot/grok-code-fast-1", variant: "low" },
13951
- designer: { model: "github-copilot/grok-code-fast-1", variant: "medium" },
13952
- fixer: { model: "github-copilot/grok-code-fast-1", variant: "low" }
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
- oracle: { model: "zai-coding-plan/glm-4.7", variant: "high" },
13957
- librarian: { model: "zai-coding-plan/glm-4.7", variant: "low" },
13958
- explorer: { model: "zai-coding-plan/glm-4.7", variant: "low" },
13959
- designer: { model: "zai-coding-plan/glm-4.7", variant: "medium" },
13960
- fixer: { model: "zai-coding-plan/glm-4.7", variant: "low" }
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
- oracle: { model: "google/antigravity-gemini-3.1-pro" },
13965
- librarian: {
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
- explorer: {
13975
+ surveyor: {
13970
13976
  model: "google/antigravity-gemini-3-flash",
13971
13977
  variant: "low"
13972
13978
  },
13973
- designer: {
13979
+ architect: {
13974
13980
  model: "google/antigravity-gemini-3-flash",
13975
13981
  variant: "medium"
13976
13982
  },
13977
- fixer: { model: "google/antigravity-gemini-3-flash", variant: "low" }
13983
+ writer: { model: "google/antigravity-gemini-3-flash", variant: "low" }
13978
13984
  },
13979
13985
  chutes: {
13980
13986
  orchestrator: { model: "chutes/kimi-k2.5" },
13981
- oracle: { model: "chutes/kimi-k2.5", variant: "high" },
13982
- librarian: { model: "chutes/minimax-m2.1", variant: "low" },
13983
- explorer: { model: "chutes/minimax-m2.1", variant: "low" },
13984
- designer: { model: "chutes/kimi-k2.5", variant: "medium" },
13985
- fixer: { model: "chutes/minimax-m2.1", variant: "low" }
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
- oracle: { model: "opencode/big-pickle", variant: "high" },
13990
- librarian: { model: "opencode/big-pickle", variant: "low" },
13991
- explorer: { model: "opencode/big-pickle", variant: "low" },
13992
- designer: { model: "opencode/big-pickle", variant: "medium" },
13993
- fixer: { model: "opencode/big-pickle", variant: "low" }
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 === "designer" && !skills.includes("agent-browser")) {
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.explorer.model;
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.oracle = createAgentConfig("oracle", MODEL_MAPPINGS.openai.oracle);
14027
- } else if (!result.oracle) {
14028
- result.oracle = createAgentConfig("oracle", MODEL_MAPPINGS.antigravity.oracle);
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.explorer = createAgentConfig("explorer", {
14036
+ result.surveyor = createAgentConfig("surveyor", {
14031
14037
  ...antigravityFlash,
14032
14038
  variant: "low"
14033
14039
  });
14034
14040
  if (config2.hasChutes) {
14035
- result.librarian = createAgentConfig("librarian", {
14041
+ result.synthesizer = createAgentConfig("synthesizer", {
14036
14042
  model: chutesSupport,
14037
14043
  variant: "low"
14038
14044
  });
14039
- result.designer = createAgentConfig("designer", {
14045
+ result.architect = createAgentConfig("architect", {
14040
14046
  model: chutesPrimary,
14041
14047
  variant: "medium"
14042
14048
  });
14043
14049
  } else {
14044
- result.librarian = createAgentConfig("librarian", {
14050
+ result.synthesizer = createAgentConfig("synthesizer", {
14045
14051
  ...antigravityFlash,
14046
14052
  variant: "low"
14047
14053
  });
14048
- result.designer = createAgentConfig("designer", {
14054
+ result.architect = createAgentConfig("architect", {
14049
14055
  ...antigravityFlash,
14050
14056
  variant: "medium"
14051
14057
  });
14052
14058
  }
14053
14059
  if (config2.hasOpenAI) {
14054
- result.fixer = createAgentConfig("fixer", {
14055
- ...MODEL_MAPPINGS.openai.oracle,
14060
+ result.writer = createAgentConfig("writer", {
14061
+ ...MODEL_MAPPINGS.openai.critic,
14056
14062
  variant: "low"
14057
14063
  });
14058
14064
  } else if (config2.hasChutes) {
14059
- result.fixer = createAgentConfig("fixer", {
14065
+ result.writer = createAgentConfig("writer", {
14060
14066
  model: chutesSupport,
14061
14067
  variant: "low"
14062
14068
  });
14063
14069
  } else {
14064
- result.fixer = createAgentConfig("fixer", {
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 === "designer" && !skills.includes("agent-browser")) {
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("oracle", primaryModel);
14183
- setAgent("designer", primaryModel);
14188
+ setAgent("critic", primaryModel);
14189
+ setAgent("architect", primaryModel);
14184
14190
  }
14185
- setAgent("librarian", secondaryModel);
14186
- setAgent("explorer", secondaryModel);
14187
- setAgent("fixer", secondaryModel);
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("oracle", primaryModel);
14204
- setAgent("designer", primaryModel);
14205
- setAgent("librarian", secondaryModel);
14206
- setAgent("explorer", secondaryModel);
14207
- setAgent("fixer", secondaryModel);
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 === "explorer" || agentName === "librarian" || agentName === "fixer";
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 === "explorer" || agentName === "librarian" || agentName === "fixer";
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 === "oracle") {
14269
- activeModelInfo = { ...MODEL_MAPPINGS.openai.oracle };
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
- oracle: -6,
14768
- designer: -8,
14769
- explorer: -6,
14770
- librarian: -12,
14771
- fixer: -12
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
- oracle: 1,
14776
- designer: 3,
14777
- explorer: 2,
14778
- librarian: 2,
14779
- fixer: 3
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
- oracle: 1,
14784
- designer: 2,
14785
- explorer: 4,
14786
- librarian: 4,
14787
- fixer: 4
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 === "explorer" ? 1.4 : 1;
14813
+ const explorerLatencyMultiplier = agent === "surveyor" ? 1.4 : 1;
14808
14814
  return {
14809
14815
  status: statusValue(model.status),
14810
14816
  context: normalizedContext,
14811
- output: agent === "designer" ? designerOutputScore : normalizedOutput,
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
- oracle: {
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
- designer: {
14858
+ architect: {
14853
14859
  attachment: 12,
14854
14860
  output: 10,
14855
14861
  quality: 16,
14856
14862
  coding: 10
14857
14863
  },
14858
- explorer: {
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
- librarian: {
14871
+ synthesizer: {
14866
14872
  context: 14,
14867
14873
  output: 10,
14868
14874
  quality: 18,
14869
14875
  coding: 14
14870
14876
  },
14871
- fixer: {
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
- "oracle",
14934
- "designer",
14935
- "explorer",
14936
- "librarian",
14937
- "fixer"
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
- "oracle",
14947
+ "critic",
14942
14948
  "orchestrator",
14943
- "fixer",
14944
- "designer",
14945
- "librarian",
14946
- "explorer"
14949
+ "writer",
14950
+ "architect",
14951
+ "synthesizer",
14952
+ "surveyor"
14947
14953
  ];
14948
14954
  var ROLE_VARIANT = {
14949
14955
  orchestrator: undefined,
14950
- oracle: "high",
14951
- designer: "medium",
14952
- explorer: "low",
14953
- librarian: "low",
14954
- fixer: "low"
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
- oracle: -12,
15115
+ critic: -12,
15110
15116
  orchestrator: -10,
15111
- fixer: -22,
15112
- designer: -14,
15113
- librarian: -18,
15114
- explorer: -10
15117
+ writer: -22,
15118
+ architect: -14,
15119
+ synthesizer: -18,
15120
+ surveyor: -10
15115
15121
  };
15116
15122
  const kimiBonus = {
15117
- oracle: 0,
15123
+ critic: 0,
15118
15124
  orchestrator: 0,
15119
- fixer: 8,
15120
- designer: 6,
15121
- librarian: 5,
15122
- explorer: 4
15125
+ writer: 8,
15126
+ architect: 6,
15127
+ synthesizer: 5,
15128
+ surveyor: 4
15123
15129
  };
15124
15130
  const minimaxBonus = {
15125
- oracle: 0,
15131
+ critic: 0,
15126
15132
  orchestrator: 0,
15127
- fixer: 10,
15128
- designer: 3,
15129
- librarian: 9,
15130
- explorer: 12
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 === "explorer" || agent === "librarian" || agent === "fixer") && !model.toolcall) {
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 === "oracle") {
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 === "designer") {
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 === "explorer") {
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 === "librarian") {
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 === "explorer") {
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 === "explorer" ? -6 : 12;
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 === "oracle" || agent === "orchestrator")
15357
+ if (agent === "critic" || agent === "orchestrator")
15352
15358
  return 12;
15353
- if (agent === "fixer")
15359
+ if (agent === "writer")
15354
15360
  return 15;
15355
- if (agent === "designer")
15361
+ if (agent === "architect")
15356
15362
  return 16;
15357
- if (agent === "librarian")
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 === "oracle" || agent === "orchestrator" ? 8 : agent === "designer" || agent === "librarian" ? 12 : agent === "fixer" ? 15 : 18);
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 !== "explorer" && isZai47Model(chosen.model) && hasFlashToken(chosen.model)) {
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 === "explorer" || agent === "librarian" || agent === "fixer" ? config2.selectedChutesSecondaryModel ?? config2.selectedChutesPrimaryModel : config2.selectedChutesPrimaryModel;
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 === "explorer" || agent === "librarian" || agent === "fixer" ? config2.selectedOpenCodeSecondaryModel ?? config2.selectedOpenCodePrimaryModel : config2.selectedOpenCodePrimaryModel;
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
- "oracle",
16500
- "designer",
16501
- "explorer",
16502
- "librarian",
16503
- "fixer"
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/oracle");
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 explorer/librarian/fixer");
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/oracle/designer");
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 explorer/librarian/fixer");
16659
+ selectedChutesSecondaryModel = await askModelSelection(rl, chutesSupportList, chutesSupportDefault, "Choose Chutes support model for surveyor/synthesizer/writer");
16654
16660
  }
16655
16661
  console.log();
16656
16662
  }
@@ -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 oracle: {
7
+ readonly critic: {
8
8
  readonly model: "kimi-for-coding/k2p5";
9
9
  readonly variant: "high";
10
10
  };
11
- readonly librarian: {
11
+ readonly synthesizer: {
12
12
  readonly model: "kimi-for-coding/k2p5";
13
13
  readonly variant: "low";
14
14
  };
15
- readonly explorer: {
15
+ readonly surveyor: {
16
16
  readonly model: "kimi-for-coding/k2p5";
17
17
  readonly variant: "low";
18
18
  };
19
- readonly designer: {
19
+ readonly architect: {
20
20
  readonly model: "kimi-for-coding/k2p5";
21
21
  readonly variant: "medium";
22
22
  };
23
- readonly fixer: {
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 oracle: {
32
+ readonly critic: {
33
33
  readonly model: "openai/gpt-5.3-codex";
34
34
  readonly variant: "high";
35
35
  };
36
- readonly librarian: {
36
+ readonly synthesizer: {
37
37
  readonly model: "openai/gpt-5.1-codex-mini";
38
38
  readonly variant: "low";
39
39
  };
40
- readonly explorer: {
40
+ readonly surveyor: {
41
41
  readonly model: "openai/gpt-5.1-codex-mini";
42
42
  readonly variant: "low";
43
43
  };
44
- readonly designer: {
44
+ readonly architect: {
45
45
  readonly model: "openai/gpt-5.1-codex-mini";
46
46
  readonly variant: "medium";
47
47
  };
48
- readonly fixer: {
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 oracle: {
57
+ readonly critic: {
58
58
  readonly model: "anthropic/claude-opus-4-6";
59
59
  readonly variant: "high";
60
60
  };
61
- readonly librarian: {
61
+ readonly synthesizer: {
62
62
  readonly model: "anthropic/claude-sonnet-4-5";
63
63
  readonly variant: "low";
64
64
  };
65
- readonly explorer: {
65
+ readonly surveyor: {
66
66
  readonly model: "anthropic/claude-haiku-4-5";
67
67
  readonly variant: "low";
68
68
  };
69
- readonly designer: {
69
+ readonly architect: {
70
70
  readonly model: "anthropic/claude-sonnet-4-5";
71
71
  readonly variant: "medium";
72
72
  };
73
- readonly fixer: {
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 oracle: {
82
+ readonly critic: {
83
83
  readonly model: "github-copilot/grok-code-fast-1";
84
84
  readonly variant: "high";
85
85
  };
86
- readonly librarian: {
86
+ readonly synthesizer: {
87
87
  readonly model: "github-copilot/grok-code-fast-1";
88
88
  readonly variant: "low";
89
89
  };
90
- readonly explorer: {
90
+ readonly surveyor: {
91
91
  readonly model: "github-copilot/grok-code-fast-1";
92
92
  readonly variant: "low";
93
93
  };
94
- readonly designer: {
94
+ readonly architect: {
95
95
  readonly model: "github-copilot/grok-code-fast-1";
96
96
  readonly variant: "medium";
97
97
  };
98
- readonly fixer: {
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 oracle: {
107
+ readonly critic: {
108
108
  readonly model: "zai-coding-plan/glm-4.7";
109
109
  readonly variant: "high";
110
110
  };
111
- readonly librarian: {
111
+ readonly synthesizer: {
112
112
  readonly model: "zai-coding-plan/glm-4.7";
113
113
  readonly variant: "low";
114
114
  };
115
- readonly explorer: {
115
+ readonly surveyor: {
116
116
  readonly model: "zai-coding-plan/glm-4.7";
117
117
  readonly variant: "low";
118
118
  };
119
- readonly designer: {
119
+ readonly architect: {
120
120
  readonly model: "zai-coding-plan/glm-4.7";
121
121
  readonly variant: "medium";
122
122
  };
123
- readonly fixer: {
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 oracle: {
132
+ readonly critic: {
133
133
  readonly model: "google/antigravity-gemini-3.1-pro";
134
134
  };
135
- readonly librarian: {
135
+ readonly synthesizer: {
136
136
  readonly model: "google/antigravity-gemini-3-flash";
137
137
  readonly variant: "low";
138
138
  };
139
- readonly explorer: {
139
+ readonly surveyor: {
140
140
  readonly model: "google/antigravity-gemini-3-flash";
141
141
  readonly variant: "low";
142
142
  };
143
- readonly designer: {
143
+ readonly architect: {
144
144
  readonly model: "google/antigravity-gemini-3-flash";
145
145
  readonly variant: "medium";
146
146
  };
147
- readonly fixer: {
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 oracle: {
156
+ readonly critic: {
157
157
  readonly model: "chutes/kimi-k2.5";
158
158
  readonly variant: "high";
159
159
  };
160
- readonly librarian: {
160
+ readonly synthesizer: {
161
161
  readonly model: "chutes/minimax-m2.1";
162
162
  readonly variant: "low";
163
163
  };
164
- readonly explorer: {
164
+ readonly surveyor: {
165
165
  readonly model: "chutes/minimax-m2.1";
166
166
  readonly variant: "low";
167
167
  };
168
- readonly designer: {
168
+ readonly architect: {
169
169
  readonly model: "chutes/kimi-k2.5";
170
170
  readonly variant: "medium";
171
171
  };
172
- readonly fixer: {
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 oracle: {
181
+ readonly critic: {
182
182
  readonly model: "opencode/big-pickle";
183
183
  readonly variant: "high";
184
184
  };
185
- readonly librarian: {
185
+ readonly synthesizer: {
186
186
  readonly model: "opencode/big-pickle";
187
187
  readonly variant: "low";
188
188
  };
189
- readonly explorer: {
189
+ readonly surveyor: {
190
190
  readonly model: "opencode/big-pickle";
191
191
  readonly variant: "low";
192
192
  };
193
- readonly designer: {
193
+ readonly architect: {
194
194
  readonly model: "opencode/big-pickle";
195
195
  readonly variant: "medium";
196
196
  };
197
- readonly fixer: {
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' | 'oracle' | 'designer' | 'explorer' | 'librarian' | 'fixer';
5
+ export type ScoringAgentName = 'orchestrator' | 'critic' | 'architect' | 'surveyor' | 'synthesizer' | 'writer';
6
6
  export interface ScoringContext {
7
7
  agent: ScoringAgentName;
8
8
  externalSignals?: ExternalSignalMap;
@@ -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", "explorer")
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: ["designer"],
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., "explorer").'
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="explorer".'
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., "@oracle" or "oracle")
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("@oracle") // returns "oracle"
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, "@oracle") // returns "high" if configured
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: "oracle" }) // returns { agent: "oracle", variant: "high" }
43
- * applyAgentVariant("high", { agent: "oracle", variant: "low" }) // returns original body with variant: "low"
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",
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