oh-my-openidea 0.1.4 → 0.1.6
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 +175 -33
- package/dist/cli/index.js +44 -14
- package/dist/cli/types.d.ts +2 -0
- package/dist/config/schema.d.ts +0 -3
- package/dist/index.js +357 -339
- package/dist/tools/alphaxiv/index.d.ts +13 -0
- package/dist/tools/index.d.ts +2 -2
- package/package.json +1 -1
- package/src/skills/alphaxiv-paper-lookup/SKILL.md +68 -0
- package/src/skills/hypothesis-generation/SKILL.md +3 -3
- package/src/skills/idea-critique/SKILL.md +4 -3
- package/src/skills/literature-review/SKILL.md +6 -6
package/README.md
CHANGED
|
@@ -20,9 +20,7 @@ bunx oh-my-openidea@latest install
|
|
|
20
20
|
Non-interactive mode with API keys:
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
bunx oh-my-openidea@latest install --no-tui --openai=yes --anthropic=yes --tmux=no --skills=yes
|
|
24
|
-
--serpapi-key=YOUR_SERPAPI_KEY \
|
|
25
|
-
--semantic-scholar-key=YOUR_S2_KEY
|
|
23
|
+
bunx oh-my-openidea@latest install --no-tui --openai=yes --anthropic=no --antigravity=yes --copilot=no --zai-plan=no --chutes=no --kimi=yes --tmux=no --skills=yes --serpapi-key=YOUR_SERPAPI_KEY --semantic-scholar-key=YOUR_S2_KEY
|
|
26
24
|
```
|
|
27
25
|
|
|
28
26
|
Then authenticate:
|
|
@@ -57,61 +55,205 @@ Additional guides:
|
|
|
57
55
|
|
|
58
56
|
### 01. Orchestrator: The Architect of Discovery
|
|
59
57
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
<table>
|
|
59
|
+
<tr>
|
|
60
|
+
<td width="240" align="center" valign="top">
|
|
61
|
+
<img src="img/orchestrator.png" alt="Orchestrator" width="220" />
|
|
62
|
+
</td>
|
|
63
|
+
<td valign="top">
|
|
64
|
+
<strong>The one who sees all paths.</strong> The Orchestrator is
|
|
65
|
+
the lead coordinator for the whole research workflow. Give it a
|
|
66
|
+
problem, and it decides which agents should work next, what
|
|
67
|
+
information is still missing, and how the pieces should come
|
|
68
|
+
together into a strong research direction. In practice, it runs
|
|
69
|
+
the full pipeline: clarifies the problem, dispatches parallel
|
|
70
|
+
literature searches to <code>@surveyor</code>, hands the corpus
|
|
71
|
+
to <code>@synthesizer</code> for gap extraction, generates
|
|
72
|
+
3-5 concrete hypotheses itself, sends the strongest candidates
|
|
73
|
+
to <code>@critic</code> for novelty/feasibility review, then
|
|
74
|
+
calls <code>@architect</code> and <code>@writer</code> to turn
|
|
75
|
+
the winning idea into an executable plan and paper outline. It
|
|
76
|
+
is the only agent with full delegation authority and is
|
|
77
|
+
responsible for deciding when to branch in parallel and when to
|
|
78
|
+
keep steps sequential.
|
|
79
|
+
</td>
|
|
80
|
+
</tr>
|
|
81
|
+
<tr>
|
|
82
|
+
<td colspan="2">
|
|
83
|
+
<strong>Role:</strong> Strategic research coordination and idea synthesis<br/>
|
|
84
|
+
<strong>How it works:</strong> Multi-stage planner with explicit subagent routing, limited refinement loops, and final synthesis across all intermediate outputs<br/>
|
|
85
|
+
<strong>Best Model Traits:</strong> Strong long-horizon planning, reliable tool/subagent orchestration, stable structured reasoning, and the ability to compress many intermediate results into clear decisions<br/>
|
|
86
|
+
<strong>Prompt:</strong> <code>orchestrator.ts</code><br/>
|
|
87
|
+
</td>
|
|
88
|
+
</tr>
|
|
89
|
+
</table>
|
|
65
90
|
|
|
66
91
|
---
|
|
67
92
|
|
|
68
93
|
### 02. Surveyor: The Cartographer of Knowledge
|
|
69
94
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
95
|
+
<table>
|
|
96
|
+
<tr>
|
|
97
|
+
<td width="240" align="center" valign="top">
|
|
98
|
+
<img src="img/explorer.png" alt="Surveyor" width="220" />
|
|
99
|
+
</td>
|
|
100
|
+
<td valign="top">
|
|
101
|
+
<strong>The one who maps the unknown.</strong> The Surveyor finds
|
|
102
|
+
and collects the most relevant papers for your topic. It helps
|
|
103
|
+
you quickly understand what has already been done, which papers
|
|
104
|
+
matter most, and where the current limits of the literature are.
|
|
105
|
+
Its job is deliberately narrow and read-only: search, retrieve,
|
|
106
|
+
and organize. It runs parallel queries across arXiv, Semantic
|
|
107
|
+
Scholar, Google Scholar, and the web; prefers recent work by
|
|
108
|
+
default; separates foundational papers from recent advances; and
|
|
109
|
+
always returns traceable identifiers such as arXiv IDs or
|
|
110
|
+
Semantic Scholar IDs so later agents can verify claims instead
|
|
111
|
+
of relying on vague summaries.
|
|
112
|
+
</td>
|
|
113
|
+
</tr>
|
|
114
|
+
<tr>
|
|
115
|
+
<td colspan="2">
|
|
116
|
+
<strong>Role:</strong> Literature search and paper retrieval<br/>
|
|
117
|
+
<strong>How it works:</strong> Read-only retrieval agent that fans out across multiple academic sources, compares query variants, and builds a paper corpus with metadata for downstream use<br/>
|
|
118
|
+
<strong>Best Model Traits:</strong> Fast tool calling, high extraction precision, low hallucination rate on bibliographic details, and good breadth-first search behavior under ambiguous queries<br/>
|
|
119
|
+
<strong>Prompt:</strong> <code>surveyor.ts</code><br/>
|
|
120
|
+
</td>
|
|
121
|
+
</tr>
|
|
122
|
+
</table>
|
|
75
123
|
|
|
76
124
|
---
|
|
77
125
|
|
|
78
126
|
### 03. Synthesizer: The Weaver of Understanding
|
|
79
127
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
128
|
+
<table>
|
|
129
|
+
<tr>
|
|
130
|
+
<td width="240" align="center" valign="top">
|
|
131
|
+
<img src="img/librarian.png" alt="Synthesizer" width="220" />
|
|
132
|
+
</td>
|
|
133
|
+
<td valign="top">
|
|
134
|
+
<strong>The one who connects the dots.</strong> The Synthesizer
|
|
135
|
+
turns a pile of papers into a clear understanding of the field.
|
|
136
|
+
It groups results, highlights patterns and disagreements, and
|
|
137
|
+
points out open problems that can lead to new research ideas.
|
|
138
|
+
Instead of merely summarizing, it builds a research landscape:
|
|
139
|
+
themes, trends, recurring limitations, and evidence-backed gaps.
|
|
140
|
+
It reads key sections of papers, cross-references claims across
|
|
141
|
+
the corpus, and distinguishes between gaps that are unaddressed
|
|
142
|
+
because they are genuinely hard and gaps that have simply been
|
|
143
|
+
overlooked. If the corpus is missing an important branch, it can
|
|
144
|
+
trigger a targeted follow-up search via <code>@surveyor</code>.
|
|
145
|
+
</td>
|
|
146
|
+
</tr>
|
|
147
|
+
<tr>
|
|
148
|
+
<td colspan="2">
|
|
149
|
+
<strong>Role:</strong> Gap analysis and knowledge synthesis<br/>
|
|
150
|
+
<strong>How it works:</strong> Corpus-level analyzer that reads paper sections, clusters ideas into themes, surfaces contradictions and blind spots, and outputs evidence-linked research gaps<br/>
|
|
151
|
+
<strong>Best Model Traits:</strong> Long-context reading, cross-document comparison, disciplined citation use, and strong abstraction ability without drifting away from source evidence<br/>
|
|
152
|
+
<strong>Prompt:</strong> <code>synthesizer.ts</code><br/>
|
|
153
|
+
</td>
|
|
154
|
+
</tr>
|
|
155
|
+
</table>
|
|
85
156
|
|
|
86
157
|
---
|
|
87
158
|
|
|
88
159
|
### 04. Critic: The Guardian of Truth
|
|
89
160
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
161
|
+
<table>
|
|
162
|
+
<tr>
|
|
163
|
+
<td width="240" align="center" valign="top">
|
|
164
|
+
<img src="img/oracle.png" alt="Critic" width="220" />
|
|
165
|
+
</td>
|
|
166
|
+
<td valign="top">
|
|
167
|
+
<strong>The voice of rigorous doubt.</strong> The Critic
|
|
168
|
+
stress-tests your idea before you invest too much in it. It
|
|
169
|
+
looks for weak assumptions, missing baselines, overlap with
|
|
170
|
+
prior work, and other reasons the idea might fail novelty or
|
|
171
|
+
review standards. Operationally, it behaves like an adversarial
|
|
172
|
+
program committee reviewer: it searches for overlapping prior
|
|
173
|
+
work, reads candidate papers to verify whether the overlap is
|
|
174
|
+
superficial or real, and scores each idea on novelty,
|
|
175
|
+
feasibility, significance, clarity, and overall quality. When
|
|
176
|
+
needed, it can trigger targeted follow-up literature checks via
|
|
177
|
+
<code>@surveyor</code>, but it does not redesign the idea
|
|
178
|
+
itself; its purpose is to reject weak directions early and make
|
|
179
|
+
promising ones harder to fool yourself about.
|
|
180
|
+
</td>
|
|
181
|
+
</tr>
|
|
182
|
+
<tr>
|
|
183
|
+
<td colspan="2">
|
|
184
|
+
<strong>Role:</strong> Novelty validation and adversarial review<br/>
|
|
185
|
+
<strong>How it works:</strong> Evidence-first evaluator that combines prior-work search, paper-level overlap verification, and structured review scoring in a NeurIPS/ICML-style format<br/>
|
|
186
|
+
<strong>Best Model Traits:</strong> Skeptical reasoning, careful distinction between related and duplicate ideas, strong comparative judgment, and consistency when turning evidence into explicit scores and verdicts<br/>
|
|
187
|
+
<strong>Prompt:</strong> <code>critic.ts</code><br/>
|
|
188
|
+
</td>
|
|
189
|
+
</tr>
|
|
190
|
+
</table>
|
|
95
191
|
|
|
96
192
|
---
|
|
97
193
|
|
|
98
194
|
### 05. Architect: The Builder of Methods
|
|
99
195
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
196
|
+
<table>
|
|
197
|
+
<tr>
|
|
198
|
+
<td width="240" align="center" valign="top">
|
|
199
|
+
<img src="img/designer.png" alt="Architect" width="220" />
|
|
200
|
+
</td>
|
|
201
|
+
<td valign="top">
|
|
202
|
+
<strong>The one who turns vision into plan.</strong> The
|
|
203
|
+
Architect converts an idea into a concrete experiment plan. It
|
|
204
|
+
defines datasets, baselines, metrics, ablations, failure cases,
|
|
205
|
+
and resource needs so you know exactly how to test whether the
|
|
206
|
+
idea works. It takes a hypothesis that has already survived
|
|
207
|
+
critique and expands it into an executable methodology: method
|
|
208
|
+
overview, baseline stack, dataset choices, statistical tests,
|
|
209
|
+
ablation plan, implementation notes, and realistic compute
|
|
210
|
+
estimates. It is a leaf agent by design, which means it focuses
|
|
211
|
+
on turning validated ideas into concrete experimental decisions
|
|
212
|
+
rather than delegating further.
|
|
213
|
+
</td>
|
|
214
|
+
</tr>
|
|
215
|
+
<tr>
|
|
216
|
+
<td colspan="2">
|
|
217
|
+
<strong>Role:</strong> Methodology and experiment design<br/>
|
|
218
|
+
<strong>How it works:</strong> Execution planner that translates validated ideas into benchmarkable experiments with concrete baselines, datasets, metrics, ablations, and compute budgets<br/>
|
|
219
|
+
<strong>Best Model Traits:</strong> High specificity, strong methodological priors, good benchmark literacy, realistic resource estimation, and low tolerance for vague implementation advice<br/>
|
|
220
|
+
<strong>Prompt:</strong> <code>architect.ts</code><br/>
|
|
221
|
+
</td>
|
|
222
|
+
</tr>
|
|
223
|
+
</table>
|
|
105
224
|
|
|
106
225
|
---
|
|
107
226
|
|
|
108
227
|
### 06. Writer: The Voice of Science
|
|
109
228
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
229
|
+
<table>
|
|
230
|
+
<tr>
|
|
231
|
+
<td width="240" align="center" valign="top">
|
|
232
|
+
<img src="img/fixer.png" alt="Writer" width="220" />
|
|
233
|
+
</td>
|
|
234
|
+
<td valign="top">
|
|
235
|
+
<strong>The one who makes it legible to the world.</strong> The
|
|
236
|
+
Writer turns your research into a clear paper draft. It helps
|
|
237
|
+
organize the story, sharpen the main message, and present the
|
|
238
|
+
method and results in a way that is easy for readers and
|
|
239
|
+
reviewers to follow. Unlike the other agents, it is intentionally
|
|
240
|
+
execution-only: no external search, no tool-driven fact hunting,
|
|
241
|
+
and no subagent delegation. It assumes the research content has
|
|
242
|
+
already been established upstream and focuses on turning that
|
|
243
|
+
content into paper structure, abstract, introduction, related
|
|
244
|
+
work narrative, and section-level draft text that follows
|
|
245
|
+
mainstream ML conference conventions.
|
|
246
|
+
</td>
|
|
247
|
+
</tr>
|
|
248
|
+
<tr>
|
|
249
|
+
<td colspan="2">
|
|
250
|
+
<strong>Role:</strong> Research writing and paper structure<br/>
|
|
251
|
+
<strong>How it works:</strong> Context-conditioned writer that receives finalized idea and methodology, then produces publication-style outlines and drafts without inventing unsupported claims<br/>
|
|
252
|
+
<strong>Best Model Traits:</strong> Strong academic writing quality, good discourse organization, precise controllability, and discipline about staying within provided evidence instead of fabricating results<br/>
|
|
253
|
+
<strong>Prompt:</strong> <code>writer.ts</code><br/>
|
|
254
|
+
</td>
|
|
255
|
+
</tr>
|
|
256
|
+
</table>
|
|
115
257
|
|
|
116
258
|
---
|
|
117
259
|
|
package/dist/cli/index.js
CHANGED
|
@@ -13736,7 +13736,7 @@ var TmuxConfigSchema = exports_external.object({
|
|
|
13736
13736
|
main_pane_size: exports_external.number().min(20).max(80).default(60)
|
|
13737
13737
|
});
|
|
13738
13738
|
var PresetSchema = exports_external.record(exports_external.string(), AgentOverrideConfigSchema);
|
|
13739
|
-
var McpNameSchema = exports_external.enum(["websearch"
|
|
13739
|
+
var McpNameSchema = exports_external.enum(["websearch"]);
|
|
13740
13740
|
var BackgroundTaskConfigSchema = exports_external.object({
|
|
13741
13741
|
maxConcurrentStarts: exports_external.number().min(1).max(50).default(10)
|
|
13742
13742
|
});
|
|
@@ -13760,10 +13760,10 @@ var PluginConfigSchema = exports_external.object({
|
|
|
13760
13760
|
// src/config/agent-mcps.ts
|
|
13761
13761
|
var DEFAULT_AGENT_MCPS = {
|
|
13762
13762
|
orchestrator: ["websearch"],
|
|
13763
|
-
surveyor: ["websearch"
|
|
13764
|
-
synthesizer: ["websearch"
|
|
13765
|
-
critic: [
|
|
13766
|
-
architect: ["websearch"
|
|
13763
|
+
surveyor: ["websearch"],
|
|
13764
|
+
synthesizer: ["websearch"],
|
|
13765
|
+
critic: [],
|
|
13766
|
+
architect: ["websearch"],
|
|
13767
13767
|
writer: ["websearch"]
|
|
13768
13768
|
};
|
|
13769
13769
|
|
|
@@ -13817,6 +13817,18 @@ var CUSTOM_SKILLS = [
|
|
|
13817
13817
|
description: "Repository understanding and hierarchical codemap generation",
|
|
13818
13818
|
allowedAgents: ["orchestrator"],
|
|
13819
13819
|
sourcePath: "src/skills/cartography"
|
|
13820
|
+
},
|
|
13821
|
+
{
|
|
13822
|
+
name: "alphaxiv-paper-lookup",
|
|
13823
|
+
description: "Look up arXiv papers via AlphaXiv structured overview",
|
|
13824
|
+
allowedAgents: [
|
|
13825
|
+
"orchestrator",
|
|
13826
|
+
"surveyor",
|
|
13827
|
+
"synthesizer",
|
|
13828
|
+
"critic",
|
|
13829
|
+
"architect"
|
|
13830
|
+
],
|
|
13831
|
+
sourcePath: "src/skills/alphaxiv-paper-lookup"
|
|
13820
13832
|
}
|
|
13821
13833
|
];
|
|
13822
13834
|
function getCustomSkillsDir() {
|
|
@@ -16253,6 +16265,8 @@ function argsToConfig(args) {
|
|
|
16253
16265
|
preferredOpenCodeModel: args.opencodeFreeModel && args.opencodeFreeModel !== "auto" ? args.opencodeFreeModel : undefined,
|
|
16254
16266
|
artificialAnalysisApiKey: args.aaKey,
|
|
16255
16267
|
openRouterApiKey: args.openrouterKey,
|
|
16268
|
+
serpApiKey: args.serpApiKey,
|
|
16269
|
+
semanticScholarKey: args.semanticScholarKey,
|
|
16256
16270
|
balanceProviderUsage: args.balancedSpend === "yes",
|
|
16257
16271
|
hasTmux: args.tmux === "yes",
|
|
16258
16272
|
installSkills: args.skills === "yes",
|
|
@@ -16573,9 +16587,11 @@ async function runInteractiveMode(detected, modelsOnly = false) {
|
|
|
16573
16587
|
rl.close();
|
|
16574
16588
|
return config2;
|
|
16575
16589
|
}
|
|
16576
|
-
const totalQuestions =
|
|
16590
|
+
const totalQuestions = 13;
|
|
16577
16591
|
const existingAaKey = getEnv("ARTIFICIAL_ANALYSIS_API_KEY");
|
|
16578
16592
|
const existingOpenRouterKey = getEnv("OPENROUTER_API_KEY");
|
|
16593
|
+
const existingSerpApiKey = getEnv("SERPAPI_KEY");
|
|
16594
|
+
const existingSemanticScholarKey = getEnv("SEMANTIC_SCHOLAR_API_KEY");
|
|
16579
16595
|
console.log(`${BOLD}Question 1/${totalQuestions}:${RESET}`);
|
|
16580
16596
|
const artificialAnalysisApiKey = await askOptionalApiKey(rl, "Artificial Analysis API key for better ranking signals", existingAaKey);
|
|
16581
16597
|
if (existingAaKey && !artificialAnalysisApiKey) {
|
|
@@ -16589,6 +16605,18 @@ async function runInteractiveMode(detected, modelsOnly = false) {
|
|
|
16589
16605
|
}
|
|
16590
16606
|
console.log();
|
|
16591
16607
|
console.log(`${BOLD}Question 3/${totalQuestions}:${RESET}`);
|
|
16608
|
+
const serpApiKey = await askOptionalApiKey(rl, "SerpAPI key for Google Scholar search (enables academic Google Scholar results)", existingSerpApiKey);
|
|
16609
|
+
if (existingSerpApiKey && !serpApiKey) {
|
|
16610
|
+
printInfo("Using existing SERPAPI_KEY from environment.");
|
|
16611
|
+
}
|
|
16612
|
+
console.log();
|
|
16613
|
+
console.log(`${BOLD}Question 4/${totalQuestions}:${RESET}`);
|
|
16614
|
+
const semanticScholarKey = await askOptionalApiKey(rl, "Semantic Scholar API key for higher rate limits (optional, free tier works without it)", existingSemanticScholarKey);
|
|
16615
|
+
if (existingSemanticScholarKey && !semanticScholarKey) {
|
|
16616
|
+
printInfo("Using existing SEMANTIC_SCHOLAR_API_KEY from environment.");
|
|
16617
|
+
}
|
|
16618
|
+
console.log();
|
|
16619
|
+
console.log(`${BOLD}Question 5/${totalQuestions}:${RESET}`);
|
|
16592
16620
|
const useOpenCodeFree = await askYesNo(rl, "Use Opencode Free models (opencode/*)?", "yes");
|
|
16593
16621
|
console.log();
|
|
16594
16622
|
let availableOpenCodeFreeModels;
|
|
@@ -16619,25 +16647,25 @@ async function runInteractiveMode(detected, modelsOnly = false) {
|
|
|
16619
16647
|
console.log();
|
|
16620
16648
|
}
|
|
16621
16649
|
}
|
|
16622
|
-
console.log(`${BOLD}Question
|
|
16650
|
+
console.log(`${BOLD}Question 6/${totalQuestions}:${RESET}`);
|
|
16623
16651
|
const kimi = await askYesNo(rl, "Enable Kimi provider?", detected.hasKimi ? "yes" : "no");
|
|
16624
16652
|
console.log();
|
|
16625
|
-
console.log(`${BOLD}Question
|
|
16653
|
+
console.log(`${BOLD}Question 7/${totalQuestions}:${RESET}`);
|
|
16626
16654
|
const openai = await askYesNo(rl, "Enable OpenAI provider?", detected.hasOpenAI ? "yes" : "no");
|
|
16627
16655
|
console.log();
|
|
16628
|
-
console.log(`${BOLD}Question
|
|
16656
|
+
console.log(`${BOLD}Question 8/${totalQuestions}:${RESET}`);
|
|
16629
16657
|
const anthropic = await askYesNo(rl, "Enable Anthropic provider?", detected.hasAnthropic ? "yes" : "no");
|
|
16630
16658
|
console.log();
|
|
16631
|
-
console.log(`${BOLD}Question
|
|
16659
|
+
console.log(`${BOLD}Question 9/${totalQuestions}:${RESET}`);
|
|
16632
16660
|
const copilot = await askYesNo(rl, "Enable GitHub Copilot provider?", detected.hasCopilot ? "yes" : "no");
|
|
16633
16661
|
console.log();
|
|
16634
|
-
console.log(`${BOLD}Question
|
|
16662
|
+
console.log(`${BOLD}Question 10/${totalQuestions}:${RESET}`);
|
|
16635
16663
|
const zaiPlan = await askYesNo(rl, "Enable ZAI Coding Plan provider?", detected.hasZaiPlan ? "yes" : "no");
|
|
16636
16664
|
console.log();
|
|
16637
|
-
console.log(`${BOLD}Question
|
|
16665
|
+
console.log(`${BOLD}Question 11/${totalQuestions}:${RESET}`);
|
|
16638
16666
|
const antigravity = await askYesNo(rl, "Enable Antigravity (Google) provider?", detected.hasAntigravity ? "yes" : "no");
|
|
16639
16667
|
console.log();
|
|
16640
|
-
console.log(`${BOLD}Question
|
|
16668
|
+
console.log(`${BOLD}Question 12/${totalQuestions}:${RESET}`);
|
|
16641
16669
|
const chutes = await askYesNo(rl, "Enable Chutes provider?", detected.hasChutes ? "yes" : "no");
|
|
16642
16670
|
console.log();
|
|
16643
16671
|
if (chutes === "yes") {
|
|
@@ -16661,7 +16689,7 @@ async function runInteractiveMode(detected, modelsOnly = false) {
|
|
|
16661
16689
|
console.log();
|
|
16662
16690
|
}
|
|
16663
16691
|
}
|
|
16664
|
-
console.log(`${BOLD}Question
|
|
16692
|
+
console.log(`${BOLD}Question 13/${totalQuestions}:${RESET}`);
|
|
16665
16693
|
const balancedSpend = await askYesNo(rl, "Do you have subscriptions or pay per API? If yes, we will distribute assignments evenly across selected providers so your subscriptions last longer.", "no");
|
|
16666
16694
|
console.log();
|
|
16667
16695
|
let skills = "no";
|
|
@@ -16703,6 +16731,8 @@ async function runInteractiveMode(detected, modelsOnly = false) {
|
|
|
16703
16731
|
availableChutesModels,
|
|
16704
16732
|
artificialAnalysisApiKey,
|
|
16705
16733
|
openRouterApiKey,
|
|
16734
|
+
serpApiKey,
|
|
16735
|
+
semanticScholarKey,
|
|
16706
16736
|
balanceProviderUsage: balancedSpend === "yes",
|
|
16707
16737
|
hasTmux: false,
|
|
16708
16738
|
installSkills: skills === "yes",
|
package/dist/cli/types.d.ts
CHANGED
|
@@ -112,6 +112,8 @@ export interface InstallConfig {
|
|
|
112
112
|
scoringEngineVersion?: ScoringEngineVersion;
|
|
113
113
|
artificialAnalysisApiKey?: string;
|
|
114
114
|
openRouterApiKey?: string;
|
|
115
|
+
serpApiKey?: string;
|
|
116
|
+
semanticScholarKey?: string;
|
|
115
117
|
balanceProviderUsage?: boolean;
|
|
116
118
|
hasTmux: boolean;
|
|
117
119
|
installSkills: boolean;
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -98,9 +98,6 @@ export declare const PresetSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
|
98
98
|
export type Preset = z.infer<typeof PresetSchema>;
|
|
99
99
|
export declare const McpNameSchema: z.ZodEnum<{
|
|
100
100
|
websearch: "websearch";
|
|
101
|
-
arxiv: "arxiv";
|
|
102
|
-
semantic_scholar: "semantic_scholar";
|
|
103
|
-
google_scholar: "google_scholar";
|
|
104
101
|
}>;
|
|
105
102
|
export type McpName = z.infer<typeof McpNameSchema>;
|
|
106
103
|
export declare const BackgroundTaskConfigSchema: z.ZodObject<{
|