@jmanuelcorral/openteam 0.1.36 → 0.1.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/setupAdapters.d.ts.map +1 -1
- package/dist/cli.js +42 -28
- package/dist/commands/setup.d.ts +14 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupAdapters.d.ts","sourceRoot":"","sources":["../../src/cli/setupAdapters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setupAdapters.d.ts","sourceRoot":"","sources":["../../src/cli/setupAdapters.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EACV,eAAe,EAEf,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,QAAQ,EAEd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyBrD,qDAAqD;AACrD,eAAO,MAAM,aAAa,EAAE,QA8E3B,CAAC;AAuBF;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,OAAO,CACzD,sBAAsB,EAAE,CACzB,CAcA;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,GACb,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CA2BnE"}
|
package/dist/cli.js
CHANGED
|
@@ -2929,6 +2929,7 @@ async function runConsoleServe(deps, options) {
|
|
|
2929
2929
|
|
|
2930
2930
|
// src/cli/setupAdapters.ts
|
|
2931
2931
|
import {
|
|
2932
|
+
autocomplete,
|
|
2932
2933
|
cancel,
|
|
2933
2934
|
confirm,
|
|
2934
2935
|
intro,
|
|
@@ -3595,6 +3596,15 @@ var clackPrompter = {
|
|
|
3595
3596
|
});
|
|
3596
3597
|
return unwrap(result);
|
|
3597
3598
|
},
|
|
3599
|
+
async autocomplete(opts) {
|
|
3600
|
+
const result = await autocomplete({
|
|
3601
|
+
message: opts.message,
|
|
3602
|
+
options: opts.choices.map(toOption),
|
|
3603
|
+
...opts.initial !== undefined ? { initialValue: opts.initial } : {},
|
|
3604
|
+
...opts.placeholder !== undefined ? { placeholder: opts.placeholder } : {}
|
|
3605
|
+
});
|
|
3606
|
+
return unwrap(result);
|
|
3607
|
+
},
|
|
3598
3608
|
async multiselect(opts) {
|
|
3599
3609
|
const initialValues = opts.choices.filter((choice) => choice.selected === true).map((choice) => choice.value);
|
|
3600
3610
|
const result = await multiselect({
|
|
@@ -4476,9 +4486,6 @@ ${HELP}`
|
|
|
4476
4486
|
}
|
|
4477
4487
|
}
|
|
4478
4488
|
|
|
4479
|
-
// src/commands/setup.ts
|
|
4480
|
-
import { join as join2 } from "node:path";
|
|
4481
|
-
|
|
4482
4489
|
// src/config/persist.ts
|
|
4483
4490
|
var DEFAULT_CONFIG_PATH = ".opencode/openteam.json";
|
|
4484
4491
|
function serializeOpenTeamConfig(config) {
|
|
@@ -4687,7 +4694,7 @@ function serializeOpencodeConfig(config) {
|
|
|
4687
4694
|
}
|
|
4688
4695
|
var CUSTOM_FRONTIER = "__custom__";
|
|
4689
4696
|
var BROWSE_FRONTIER = "__browse__";
|
|
4690
|
-
var
|
|
4697
|
+
var RUNTIME_NONE = "__none__";
|
|
4691
4698
|
var RUNTIME_LOCATION_LOCAL = "__local__";
|
|
4692
4699
|
var RUNTIME_LOCATION_REMOTE = "__remote__";
|
|
4693
4700
|
function frontierRefKey(choice) {
|
|
@@ -4735,11 +4742,12 @@ async function browseFrontier(prompt, profiles) {
|
|
|
4735
4742
|
}
|
|
4736
4743
|
async function chooseFrontier(prompt, profiles) {
|
|
4737
4744
|
const sorted = sortFrontierByCost(profiles);
|
|
4738
|
-
const
|
|
4739
|
-
const selected = await prompt.
|
|
4740
|
-
message: "Modelo frontier baseline (cheapest
|
|
4745
|
+
const first = sorted[0];
|
|
4746
|
+
const selected = await prompt.autocomplete({
|
|
4747
|
+
message: "Modelo frontier baseline (escribe para buscar; cheapest primero)",
|
|
4748
|
+
placeholder: "busca por proveedor o modelo…",
|
|
4741
4749
|
choices: [
|
|
4742
|
-
...
|
|
4750
|
+
...sorted.map((profile) => ({
|
|
4743
4751
|
value: frontierRefKey({
|
|
4744
4752
|
providerID: profile.ref.providerID,
|
|
4745
4753
|
modelID: profile.ref.modelID
|
|
@@ -4753,9 +4761,9 @@ async function chooseFrontier(prompt, profiles) {
|
|
|
4753
4761
|
},
|
|
4754
4762
|
{ value: CUSTOM_FRONTIER, label: "Otro (introducir provider/model)" }
|
|
4755
4763
|
],
|
|
4756
|
-
initial:
|
|
4757
|
-
providerID:
|
|
4758
|
-
modelID:
|
|
4764
|
+
initial: first ? frontierRefKey({
|
|
4765
|
+
providerID: first.ref.providerID,
|
|
4766
|
+
modelID: first.ref.modelID
|
|
4759
4767
|
}) : BROWSE_FRONTIER
|
|
4760
4768
|
});
|
|
4761
4769
|
if (selected === BROWSE_FRONTIER) {
|
|
@@ -4870,19 +4878,26 @@ async function runSetup(deps) {
|
|
|
4870
4878
|
prompt.intro("openteam setup — configura opencode con routing local-first");
|
|
4871
4879
|
const detected = await deps.detect();
|
|
4872
4880
|
const detectedById = new Map(detected.map((item) => [item.id, item]));
|
|
4881
|
+
const runtimeChoices = KNOWN_RUNTIMES.map((meta) => {
|
|
4882
|
+
const info = detectedById.get(meta.id);
|
|
4883
|
+
return {
|
|
4884
|
+
value: meta.id,
|
|
4885
|
+
label: meta.label,
|
|
4886
|
+
hint: info?.reachable ? `detectado · ${info.models.length} modelo(s)` : "no detectado (puedes apuntarlo a otra máquina)",
|
|
4887
|
+
selected: info?.reachable ?? false
|
|
4888
|
+
};
|
|
4889
|
+
});
|
|
4890
|
+
runtimeChoices.push({
|
|
4891
|
+
value: RUNTIME_NONE,
|
|
4892
|
+
label: "Ninguno — usar solo modelos frontier",
|
|
4893
|
+
hint: "sin runtime local (frontier-only)"
|
|
4894
|
+
});
|
|
4873
4895
|
const enabledIds = await prompt.multiselect({
|
|
4874
|
-
message: "¿Qué runtimes locales quieres habilitar? (
|
|
4875
|
-
choices:
|
|
4876
|
-
|
|
4877
|
-
return {
|
|
4878
|
-
value: meta.id,
|
|
4879
|
-
label: meta.label,
|
|
4880
|
-
hint: info?.reachable ? `detectado · ${info.models.length} modelo(s)` : "no detectado (puedes apuntarlo a otra máquina)",
|
|
4881
|
-
selected: info?.reachable ?? false
|
|
4882
|
-
};
|
|
4883
|
-
})
|
|
4896
|
+
message: "¿Qué runtimes locales quieres habilitar? (elige 'Ninguno' para solo frontier)",
|
|
4897
|
+
choices: runtimeChoices,
|
|
4898
|
+
required: true
|
|
4884
4899
|
});
|
|
4885
|
-
const enabled = new Set(enabledIds);
|
|
4900
|
+
const enabled = new Set(enabledIds.filter((id) => id !== RUNTIME_NONE));
|
|
4886
4901
|
const runtimes = [];
|
|
4887
4902
|
for (const meta of KNOWN_RUNTIMES) {
|
|
4888
4903
|
const info = detectedById.get(meta.id);
|
|
@@ -4962,9 +4977,9 @@ async function runSetup(deps) {
|
|
|
4962
4977
|
const opencodeConfig = buildOpencodeConfig(answers);
|
|
4963
4978
|
const orchestratorAgent = buildOrchestratorAgent(frontier, { yolo });
|
|
4964
4979
|
const slashCommands = buildOpenteamCommands();
|
|
4965
|
-
const openTeamPath =
|
|
4966
|
-
const opencodePath =
|
|
4967
|
-
const agentPath =
|
|
4980
|
+
const openTeamPath = DEFAULT_CONFIG_PATH;
|
|
4981
|
+
const opencodePath = OPENCODE_CONFIG_PATH;
|
|
4982
|
+
const agentPath = ORCHESTRATOR_AGENT_PATH;
|
|
4968
4983
|
const existing = [];
|
|
4969
4984
|
if (await deps.fileExists(openTeamPath)) {
|
|
4970
4985
|
existing.push(DEFAULT_CONFIG_PATH);
|
|
@@ -4976,7 +4991,7 @@ async function runSetup(deps) {
|
|
|
4976
4991
|
existing.push(ORCHESTRATOR_AGENT_PATH);
|
|
4977
4992
|
}
|
|
4978
4993
|
for (const command of slashCommands) {
|
|
4979
|
-
if (await deps.fileExists(
|
|
4994
|
+
if (await deps.fileExists(command.path)) {
|
|
4980
4995
|
existing.push(command.path);
|
|
4981
4996
|
}
|
|
4982
4997
|
}
|
|
@@ -4994,7 +5009,7 @@ async function runSetup(deps) {
|
|
|
4994
5009
|
await deps.writeFile(opencodePath, serializeOpencodeConfig(opencodeConfig));
|
|
4995
5010
|
await deps.writeFile(agentPath, orchestratorAgent);
|
|
4996
5011
|
for (const command of slashCommands) {
|
|
4997
|
-
await deps.writeFile(
|
|
5012
|
+
await deps.writeFile(command.path, command.contents);
|
|
4998
5013
|
}
|
|
4999
5014
|
const enabledSummary = runtimes.filter((runtime) => runtime.enabled).map((runtime) => {
|
|
5000
5015
|
const remote = runtime.baseURL !== undefined && !runtime.baseURL.includes("localhost") && !runtime.baseURL.includes("127.0.0.1") ? ` @ ${runtime.baseURL}` : "";
|
|
@@ -5341,7 +5356,6 @@ var deps = {
|
|
|
5341
5356
|
};
|
|
5342
5357
|
function createSetupDeps() {
|
|
5343
5358
|
return {
|
|
5344
|
-
cwd: process.cwd(),
|
|
5345
5359
|
detect: createDetect(nodeExec),
|
|
5346
5360
|
probeRuntime: createProbeRuntime(nodeExec),
|
|
5347
5361
|
loadFrontierProfiles: createLoadFrontierProfiles(),
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -107,6 +107,17 @@ export type Prompter = {
|
|
|
107
107
|
choices: SelectChoice<T>[];
|
|
108
108
|
initial?: T;
|
|
109
109
|
}): Promise<T>;
|
|
110
|
+
/**
|
|
111
|
+
* Selector con búsqueda incremental: el usuario teclea para filtrar una lista
|
|
112
|
+
* larga (p.ej. el catálogo frontier). La implementación real usa el prompt
|
|
113
|
+
* `autocomplete` de clack; los tests lo tratan como un `select` determinista.
|
|
114
|
+
*/
|
|
115
|
+
autocomplete<T>(opts: {
|
|
116
|
+
message: string;
|
|
117
|
+
choices: SelectChoice<T>[];
|
|
118
|
+
initial?: T;
|
|
119
|
+
placeholder?: string;
|
|
120
|
+
}): Promise<T>;
|
|
110
121
|
multiselect<T>(opts: {
|
|
111
122
|
message: string;
|
|
112
123
|
choices: MultiselectChoice<T>[];
|
|
@@ -123,7 +134,6 @@ export type Prompter = {
|
|
|
123
134
|
}): Promise<string>;
|
|
124
135
|
};
|
|
125
136
|
export type SetupDeps = {
|
|
126
|
-
cwd: string;
|
|
127
137
|
detect: () => Promise<DetectedRuntime[]>;
|
|
128
138
|
/**
|
|
129
139
|
* Sondea un runtime local en una `baseURL` concreta (p.ej. otra máquina de la
|
|
@@ -133,9 +143,12 @@ export type SetupDeps = {
|
|
|
133
143
|
probeRuntime?: (id: LocalRuntimeId, baseURL: string) => Promise<DetectedRuntime>;
|
|
134
144
|
loadFrontierProfiles: () => Promise<ModelCapabilityProfile[]>;
|
|
135
145
|
prompt: Prompter;
|
|
146
|
+
/** Rutas relativas a la raíz del proyecto (el storage ya está rooteado en el cwd). */
|
|
136
147
|
writeFile: (path: string, contents: string) => Promise<void>;
|
|
137
148
|
fileExists: (path: string) => Promise<boolean>;
|
|
138
149
|
};
|
|
150
|
+
/** Opción explícita "sin runtime local" en el multiselect de runtimes. */
|
|
151
|
+
export declare const RUNTIME_NONE = "__none__";
|
|
139
152
|
/** Runtime local en esta máquina (usa la URL detectada o por defecto). */
|
|
140
153
|
export declare const RUNTIME_LOCATION_LOCAL = "__local__";
|
|
141
154
|
/** Runtime local en otra máquina de la red (se introduce la URL). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|