@goondocks/myco 0.17.1 → 0.17.2
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 +1 -1
- package/dist/{agent-run-BGW4TY3D.js → agent-run-7AYHXIEF.js} +6 -6
- package/dist/{agent-tasks-XUJ6FTPL.js → agent-tasks-UUIFKBD4.js} +6 -6
- package/dist/{chunk-VGVRBSLC.js → chunk-25WHTV4N.js} +2 -2
- package/dist/{chunk-ZUSTCXHT.js → chunk-3NCVCGUZ.js} +3 -3
- package/dist/chunk-5NFJTZ64.js +14 -0
- package/dist/chunk-5NFJTZ64.js.map +1 -0
- package/dist/{chunk-2WRXLYG6.js → chunk-5ZISXCDC.js} +2 -2
- package/dist/{chunk-6SDC6V3N.js → chunk-7DAH5GLC.js} +1 -5
- package/dist/{chunk-6SDC6V3N.js.map → chunk-7DAH5GLC.js.map} +1 -1
- package/dist/{chunk-KOTFMGL5.js → chunk-BZDZORVP.js} +4 -4
- package/dist/{chunk-KKEMVH6D.js → chunk-C3C5QVLK.js} +2 -2
- package/dist/{chunk-XQHL4GMO.js → chunk-CTF7TQMJ.js} +3 -3
- package/dist/{chunk-CPL76CYD.js → chunk-DT42247G.js} +3 -3
- package/dist/{chunk-VQQ57UPG.js → chunk-F6C4IC6R.js} +4 -4
- package/dist/{chunk-VQQ57UPG.js.map → chunk-F6C4IC6R.js.map} +1 -1
- package/dist/{chunk-SODRR3HE.js → chunk-GFR542SM.js} +1 -1
- package/dist/chunk-GFR542SM.js.map +1 -0
- package/dist/{chunk-QQ7CXA7Q.js → chunk-HPZ7YAMA.js} +95 -10
- package/dist/{chunk-QQ7CXA7Q.js.map → chunk-HPZ7YAMA.js.map} +1 -1
- package/dist/{chunk-GBYLHPML.js → chunk-IGBHLFV5.js} +2 -2
- package/dist/{chunk-DKSQMH5X.js → chunk-ML6GTPZU.js} +2 -2
- package/dist/{chunk-KQOII5RU.js → chunk-NUSTG3BH.js} +3 -3
- package/dist/{chunk-2IJ6C63F.js → chunk-RKPTMHED.js} +2 -2
- package/dist/{chunk-YTOD6L6N.js → chunk-RMJPQZGF.js} +97 -7
- package/dist/chunk-RMJPQZGF.js.map +1 -0
- package/dist/{chunk-LA7NDX3J.js → chunk-SI5BBQAT.js} +2 -2
- package/dist/{chunk-OGNEW5CN.js → chunk-UTLWSKDV.js} +2 -2
- package/dist/{chunk-FEX6ALLH.js → chunk-XD3NEN3Q.js} +29 -3
- package/dist/chunk-XD3NEN3Q.js.map +1 -0
- package/dist/{chunk-N6JNOSBQ.js → chunk-XZWFMMJR.js} +3 -3
- package/dist/{chunk-UDBCAFXS.js → chunk-ZSJPI5MS.js} +2 -2
- package/dist/{cli-353VNZIY.js → cli-WJVYP2QT.js} +39 -39
- package/dist/{client-7KJ453V4.js → client-LZ3ZR4HC.js} +4 -4
- package/dist/{config-K3CJEFFO.js → config-ZQIMG3FB.js} +4 -4
- package/dist/{detect-providers-OE6HWW3M.js → detect-providers-C64L3QET.js} +4 -4
- package/dist/{doctor-RYFP7ABA.js → doctor-XEPBNHM3.js} +11 -11
- package/dist/doctor-XEPBNHM3.js.map +1 -0
- package/dist/{executor-YOKYS7OT.js → executor-NXKJU5KW.js} +25 -106
- package/dist/executor-NXKJU5KW.js.map +1 -0
- package/dist/{init-XR2JZWY2.js → init-BHVQAQ27.js} +54 -72
- package/dist/init-BHVQAQ27.js.map +1 -0
- package/dist/{llm-PGETQHZ2.js → llm-KTD6SR55.js} +4 -7
- package/dist/{loader-J56KP27U.js → loader-NEX3UF6U.js} +3 -3
- package/dist/{loader-AVWL7PNO.js → loader-SHRKUKOS.js} +3 -3
- package/dist/{main-6DGPZXRF.js → main-YFVBIRRK.js} +87 -57
- package/dist/main-YFVBIRRK.js.map +1 -0
- package/dist/{open-P7YEH7UJ.js → open-2U7ZRGA3.js} +10 -9
- package/dist/open-2U7ZRGA3.js.map +1 -0
- package/dist/open-browser-EBKBAYSM.js +9 -0
- package/dist/{post-compact-WPS4SONO.js → post-compact-QIBMEWL3.js} +6 -6
- package/dist/{post-tool-use-5WLLRGZ5.js → post-tool-use-ICGFXDVY.js} +5 -5
- package/dist/{post-tool-use-failure-6C6HSBHI.js → post-tool-use-failure-C7TLH3XQ.js} +6 -6
- package/dist/{pre-compact-Z4E4JLAK.js → pre-compact-IF7K4TQK.js} +6 -6
- package/dist/{provider-check-CESRPIY5.js → provider-check-LTLQ6BUZ.js} +4 -4
- package/dist/{registry-SPKP2WLI.js → registry-TFQ22Z7N.js} +4 -4
- package/dist/{remove-B2PFVQXK.js → remove-FBGM2QVJ.js} +7 -7
- package/dist/{resolution-events-CLDXZF67.js → resolution-events-HGKIJOTA.js} +4 -4
- package/dist/{restart-XAJDOL3E.js → restart-TQEECRNW.js} +7 -7
- package/dist/{search-ERTCTAQ3.js → search-NN5FC4Z6.js} +7 -7
- package/dist/{server-LXUA7XUQ.js → server-XMWJ4GF7.js} +4 -4
- package/dist/{session-433T6V3C.js → session-GLPAFYPO.js} +8 -8
- package/dist/{session-end-4Y5VY4OI.js → session-end-TI3ILRBC.js} +5 -5
- package/dist/{session-start-3STH4HFL.js → session-start-PJLJDVJJ.js} +10 -10
- package/dist/{setup-llm-UBBSQWX5.js → setup-llm-AQSWLXCZ.js} +8 -8
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/{stats-3NW7PGQK.js → stats-BISBIBXZ.js} +8 -8
- package/dist/{stop-L7BLMHUD.js → stop-47BJ42EO.js} +5 -5
- package/dist/{stop-failure-P5MYHGAZ.js → stop-failure-VU5BTLWX.js} +6 -6
- package/dist/{subagent-start-AIEFG4HA.js → subagent-start-SPTKQRHU.js} +6 -6
- package/dist/{subagent-stop-TZ62BSNI.js → subagent-stop-UU75BYLC.js} +6 -6
- package/dist/{task-completed-ZKVCUBCP.js → task-completed-MVDO7TZF.js} +6 -6
- package/dist/{team-WHZW6IFU.js → team-7X64J4Y6.js} +4 -4
- package/dist/ui/assets/index-CRmkSi63.css +1 -0
- package/dist/ui/assets/index-rpmSpJpm.js +842 -0
- package/dist/ui/index.html +2 -2
- package/dist/{update-P7GIQLIV.js → update-DA7VEXOS.js} +7 -7
- package/dist/{user-prompt-submit-4J7ZW6X3.js → user-prompt-submit-ADZ4NTVO.js} +5 -5
- package/dist/{verify-PSERIZPF.js → verify-QYSERHF7.js} +5 -8
- package/dist/{verify-PSERIZPF.js.map → verify-QYSERHF7.js.map} +1 -1
- package/dist/{version-OHJ5ZLHX.js → version-A72TAL2J.js} +2 -2
- package/package.json +6 -2
- package/dist/chunk-FEX6ALLH.js.map +0 -1
- package/dist/chunk-KGL5QSDN.js +0 -66
- package/dist/chunk-KGL5QSDN.js.map +0 -1
- package/dist/chunk-SODRR3HE.js.map +0 -1
- package/dist/chunk-U3SSOSIR.js +0 -26
- package/dist/chunk-U3SSOSIR.js.map +0 -1
- package/dist/chunk-Y7QCKCEJ.js +0 -26
- package/dist/chunk-Y7QCKCEJ.js.map +0 -1
- package/dist/chunk-YTOD6L6N.js.map +0 -1
- package/dist/doctor-RYFP7ABA.js.map +0 -1
- package/dist/executor-YOKYS7OT.js.map +0 -1
- package/dist/init-XR2JZWY2.js.map +0 -1
- package/dist/init-wizard-5CH2FD76.js +0 -294
- package/dist/init-wizard-5CH2FD76.js.map +0 -1
- package/dist/main-6DGPZXRF.js.map +0 -1
- package/dist/open-P7YEH7UJ.js.map +0 -1
- package/dist/openai-embeddings-LZKY6RV5.js +0 -14
- package/dist/openrouter-UTOZG6Z5.js +0 -14
- package/dist/ui/assets/index-2UyTdjlV.js +0 -842
- package/dist/ui/assets/index-Cts1wLEW.css +0 -1
- package/dist/version-OHJ5ZLHX.js.map +0 -1
- /package/dist/{agent-run-BGW4TY3D.js.map → agent-run-7AYHXIEF.js.map} +0 -0
- /package/dist/{agent-tasks-XUJ6FTPL.js.map → agent-tasks-UUIFKBD4.js.map} +0 -0
- /package/dist/{chunk-VGVRBSLC.js.map → chunk-25WHTV4N.js.map} +0 -0
- /package/dist/{chunk-ZUSTCXHT.js.map → chunk-3NCVCGUZ.js.map} +0 -0
- /package/dist/{chunk-2WRXLYG6.js.map → chunk-5ZISXCDC.js.map} +0 -0
- /package/dist/{chunk-KOTFMGL5.js.map → chunk-BZDZORVP.js.map} +0 -0
- /package/dist/{chunk-KKEMVH6D.js.map → chunk-C3C5QVLK.js.map} +0 -0
- /package/dist/{chunk-XQHL4GMO.js.map → chunk-CTF7TQMJ.js.map} +0 -0
- /package/dist/{chunk-CPL76CYD.js.map → chunk-DT42247G.js.map} +0 -0
- /package/dist/{chunk-GBYLHPML.js.map → chunk-IGBHLFV5.js.map} +0 -0
- /package/dist/{chunk-DKSQMH5X.js.map → chunk-ML6GTPZU.js.map} +0 -0
- /package/dist/{chunk-KQOII5RU.js.map → chunk-NUSTG3BH.js.map} +0 -0
- /package/dist/{chunk-2IJ6C63F.js.map → chunk-RKPTMHED.js.map} +0 -0
- /package/dist/{chunk-LA7NDX3J.js.map → chunk-SI5BBQAT.js.map} +0 -0
- /package/dist/{chunk-OGNEW5CN.js.map → chunk-UTLWSKDV.js.map} +0 -0
- /package/dist/{chunk-N6JNOSBQ.js.map → chunk-XZWFMMJR.js.map} +0 -0
- /package/dist/{chunk-UDBCAFXS.js.map → chunk-ZSJPI5MS.js.map} +0 -0
- /package/dist/{cli-353VNZIY.js.map → cli-WJVYP2QT.js.map} +0 -0
- /package/dist/{client-7KJ453V4.js.map → client-LZ3ZR4HC.js.map} +0 -0
- /package/dist/{config-K3CJEFFO.js.map → config-ZQIMG3FB.js.map} +0 -0
- /package/dist/{detect-providers-OE6HWW3M.js.map → detect-providers-C64L3QET.js.map} +0 -0
- /package/dist/{llm-PGETQHZ2.js.map → llm-KTD6SR55.js.map} +0 -0
- /package/dist/{loader-AVWL7PNO.js.map → loader-NEX3UF6U.js.map} +0 -0
- /package/dist/{loader-J56KP27U.js.map → loader-SHRKUKOS.js.map} +0 -0
- /package/dist/{openai-embeddings-LZKY6RV5.js.map → open-browser-EBKBAYSM.js.map} +0 -0
- /package/dist/{post-compact-WPS4SONO.js.map → post-compact-QIBMEWL3.js.map} +0 -0
- /package/dist/{post-tool-use-5WLLRGZ5.js.map → post-tool-use-ICGFXDVY.js.map} +0 -0
- /package/dist/{post-tool-use-failure-6C6HSBHI.js.map → post-tool-use-failure-C7TLH3XQ.js.map} +0 -0
- /package/dist/{pre-compact-Z4E4JLAK.js.map → pre-compact-IF7K4TQK.js.map} +0 -0
- /package/dist/{openrouter-UTOZG6Z5.js.map → provider-check-LTLQ6BUZ.js.map} +0 -0
- /package/dist/{provider-check-CESRPIY5.js.map → registry-TFQ22Z7N.js.map} +0 -0
- /package/dist/{remove-B2PFVQXK.js.map → remove-FBGM2QVJ.js.map} +0 -0
- /package/dist/{registry-SPKP2WLI.js.map → resolution-events-HGKIJOTA.js.map} +0 -0
- /package/dist/{restart-XAJDOL3E.js.map → restart-TQEECRNW.js.map} +0 -0
- /package/dist/{search-ERTCTAQ3.js.map → search-NN5FC4Z6.js.map} +0 -0
- /package/dist/{server-LXUA7XUQ.js.map → server-XMWJ4GF7.js.map} +0 -0
- /package/dist/{session-433T6V3C.js.map → session-GLPAFYPO.js.map} +0 -0
- /package/dist/{session-end-4Y5VY4OI.js.map → session-end-TI3ILRBC.js.map} +0 -0
- /package/dist/{session-start-3STH4HFL.js.map → session-start-PJLJDVJJ.js.map} +0 -0
- /package/dist/{setup-llm-UBBSQWX5.js.map → setup-llm-AQSWLXCZ.js.map} +0 -0
- /package/dist/{stats-3NW7PGQK.js.map → stats-BISBIBXZ.js.map} +0 -0
- /package/dist/{stop-L7BLMHUD.js.map → stop-47BJ42EO.js.map} +0 -0
- /package/dist/{stop-failure-P5MYHGAZ.js.map → stop-failure-VU5BTLWX.js.map} +0 -0
- /package/dist/{subagent-start-AIEFG4HA.js.map → subagent-start-SPTKQRHU.js.map} +0 -0
- /package/dist/{subagent-stop-TZ62BSNI.js.map → subagent-stop-UU75BYLC.js.map} +0 -0
- /package/dist/{task-completed-ZKVCUBCP.js.map → task-completed-MVDO7TZF.js.map} +0 -0
- /package/dist/{team-WHZW6IFU.js.map → team-7X64J4Y6.js.map} +0 -0
- /package/dist/{update-P7GIQLIV.js.map → update-DA7VEXOS.js.map} +0 -0
- /package/dist/{user-prompt-submit-4J7ZW6X3.js.map → user-prompt-submit-ADZ4NTVO.js.map} +0 -0
- /package/dist/{resolution-events-CLDXZF67.js.map → version-A72TAL2J.js.map} +0 -0
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
OpenRouterEmbeddingProvider
|
|
4
|
-
} from "./chunk-U3SSOSIR.js";
|
|
5
|
-
import {
|
|
6
|
-
OpenAIEmbeddingProvider
|
|
7
|
-
} from "./chunk-Y7QCKCEJ.js";
|
|
8
|
-
import "./chunk-KGL5QSDN.js";
|
|
9
|
-
import {
|
|
10
|
-
LmStudioBackend,
|
|
11
|
-
OllamaBackend
|
|
12
|
-
} from "./chunk-DKSQMH5X.js";
|
|
13
|
-
import {
|
|
14
|
-
getPluginVersion
|
|
15
|
-
} from "./chunk-LA7NDX3J.js";
|
|
16
|
-
import "./chunk-LPUQPDC2.js";
|
|
17
|
-
import {
|
|
18
|
-
DEFAULT_OLLAMA_EMBEDDING_MODEL,
|
|
19
|
-
DEFAULT_OPENAI_EMBEDDING_MODEL,
|
|
20
|
-
PROVIDER_DETECT_TIMEOUT_MS,
|
|
21
|
-
RECOMMENDED_LOCAL_CONTEXT_WINDOW
|
|
22
|
-
} from "./chunk-6SDC6V3N.js";
|
|
23
|
-
import "./chunk-E7NUADTQ.js";
|
|
24
|
-
import "./chunk-PZUWP5VK.js";
|
|
25
|
-
|
|
26
|
-
// src/cli/init-wizard.ts
|
|
27
|
-
import { select, input, password } from "@inquirer/prompts";
|
|
28
|
-
function buildEmbeddingConfig(answers) {
|
|
29
|
-
if (answers.embeddingProvider === "skip") {
|
|
30
|
-
return {
|
|
31
|
-
provider: "ollama",
|
|
32
|
-
model: DEFAULT_OLLAMA_EMBEDDING_MODEL
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
provider: answers.embeddingProvider,
|
|
37
|
-
model: answers.embeddingModel ?? DEFAULT_OLLAMA_EMBEDDING_MODEL
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function buildAgentConfig(answers) {
|
|
41
|
-
if (answers.intelligenceProvider === "cloud") {
|
|
42
|
-
return { provider: { type: "cloud" } };
|
|
43
|
-
}
|
|
44
|
-
const provider = {
|
|
45
|
-
type: answers.intelligenceProvider
|
|
46
|
-
};
|
|
47
|
-
if (answers.intelligenceBaseUrl) provider.base_url = answers.intelligenceBaseUrl;
|
|
48
|
-
if (answers.intelligenceModel) provider.model = answers.intelligenceModel;
|
|
49
|
-
return {
|
|
50
|
-
provider,
|
|
51
|
-
model: answers.intelligenceModel
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
function printBanner() {
|
|
55
|
-
const version = getPluginVersion();
|
|
56
|
-
console.log("");
|
|
57
|
-
console.log(" \u{1F344} Myco");
|
|
58
|
-
console.log(` v${version} \u2014 Collective Agent Intelligence`);
|
|
59
|
-
console.log(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
|
|
60
|
-
console.log("");
|
|
61
|
-
}
|
|
62
|
-
function ollamaInstallHint() {
|
|
63
|
-
if (process.platform === "darwin") {
|
|
64
|
-
return "Install: brew install ollama && ollama serve";
|
|
65
|
-
}
|
|
66
|
-
if (process.platform === "linux") {
|
|
67
|
-
return "Install: curl -fsSL https://ollama.com/install.sh | sh";
|
|
68
|
-
}
|
|
69
|
-
return "Install: https://ollama.com/download";
|
|
70
|
-
}
|
|
71
|
-
function printLocalModelTip() {
|
|
72
|
-
console.log("");
|
|
73
|
-
console.log(` Tip: For local models, we recommend an ${RECOMMENDED_LOCAL_CONTEXT_WINDOW / 1024}K context window.`);
|
|
74
|
-
console.log(" Set in myco.yaml under agent.tasks or configure via the dashboard.");
|
|
75
|
-
console.log("");
|
|
76
|
-
}
|
|
77
|
-
async function selectLocalIntelligenceModel(backend, providerName) {
|
|
78
|
-
const available = await backend.isAvailable();
|
|
79
|
-
if (!available) {
|
|
80
|
-
console.log("");
|
|
81
|
-
console.log(` ${providerName} is not running.`);
|
|
82
|
-
if (providerName === "Ollama") {
|
|
83
|
-
console.log(` ${ollamaInstallHint()}`);
|
|
84
|
-
} else {
|
|
85
|
-
console.log(" Start LM Studio and enable the local server.");
|
|
86
|
-
}
|
|
87
|
-
console.log("");
|
|
88
|
-
const action = await select({
|
|
89
|
-
message: `${providerName} is not available. What would you like to do?`,
|
|
90
|
-
choices: [
|
|
91
|
-
{ name: `Retry (after starting ${providerName})`, value: "retry" },
|
|
92
|
-
{ name: "Continue without selecting a model", value: "skip" }
|
|
93
|
-
]
|
|
94
|
-
});
|
|
95
|
-
if (action === "retry") {
|
|
96
|
-
return selectLocalIntelligenceModel(backend, providerName);
|
|
97
|
-
}
|
|
98
|
-
return {};
|
|
99
|
-
}
|
|
100
|
-
const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);
|
|
101
|
-
let model;
|
|
102
|
-
if (models.length > 0) {
|
|
103
|
-
model = await select({
|
|
104
|
-
message: `Select an intelligence model from ${providerName}:`,
|
|
105
|
-
choices: [
|
|
106
|
-
...models.map((m) => ({ name: m, value: m })),
|
|
107
|
-
{ name: "Enter model name manually", value: "__manual__" }
|
|
108
|
-
],
|
|
109
|
-
default: models[0]
|
|
110
|
-
});
|
|
111
|
-
} else {
|
|
112
|
-
console.log(` No models found in ${providerName}.`);
|
|
113
|
-
model = "__manual__";
|
|
114
|
-
}
|
|
115
|
-
if (model === "__manual__") {
|
|
116
|
-
model = await input({
|
|
117
|
-
message: "Model name:"
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
printLocalModelTip();
|
|
121
|
-
return { model: model || void 0 };
|
|
122
|
-
}
|
|
123
|
-
async function selectIntelligenceProvider() {
|
|
124
|
-
const provider = await select({
|
|
125
|
-
message: "How should Myco run intelligence tasks (extraction, summarization)?",
|
|
126
|
-
choices: [
|
|
127
|
-
{ name: "Cloud (Claude) \u2014 fast, requires Anthropic API key in env", value: "cloud" },
|
|
128
|
-
{ name: "Ollama (local, free)", value: "ollama" },
|
|
129
|
-
{ name: "LM Studio (local)", value: "lmstudio" }
|
|
130
|
-
],
|
|
131
|
-
default: "cloud"
|
|
132
|
-
});
|
|
133
|
-
if (provider === "cloud") {
|
|
134
|
-
return { intelligenceProvider: "cloud" };
|
|
135
|
-
}
|
|
136
|
-
if (provider === "ollama") {
|
|
137
|
-
const backend2 = new OllamaBackend();
|
|
138
|
-
const result2 = await selectLocalIntelligenceModel(backend2, "Ollama");
|
|
139
|
-
return {
|
|
140
|
-
intelligenceProvider: "ollama",
|
|
141
|
-
intelligenceModel: result2.model
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
const backend = new LmStudioBackend();
|
|
145
|
-
const result = await selectLocalIntelligenceModel(backend, "LM Studio");
|
|
146
|
-
return {
|
|
147
|
-
intelligenceProvider: "lmstudio",
|
|
148
|
-
intelligenceModel: result.model,
|
|
149
|
-
intelligenceBaseUrl: result.baseUrl
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
async function selectOllamaEmbeddingModel() {
|
|
153
|
-
const backend = new OllamaBackend();
|
|
154
|
-
const available = await backend.isAvailable();
|
|
155
|
-
if (!available) {
|
|
156
|
-
console.log("");
|
|
157
|
-
console.log(` Ollama is not running. ${ollamaInstallHint()}`);
|
|
158
|
-
console.log("");
|
|
159
|
-
const action = await select({
|
|
160
|
-
message: "Ollama is not available. What would you like to do?",
|
|
161
|
-
choices: [
|
|
162
|
-
{ name: "Retry (after starting Ollama)", value: "retry" },
|
|
163
|
-
{ name: "Switch to a cloud provider", value: "switch" },
|
|
164
|
-
{ name: "Skip embedding setup", value: "skip" }
|
|
165
|
-
]
|
|
166
|
-
});
|
|
167
|
-
if (action === "retry") {
|
|
168
|
-
return selectOllamaEmbeddingModel();
|
|
169
|
-
}
|
|
170
|
-
if (action === "switch") {
|
|
171
|
-
return selectCloudEmbeddingProvider();
|
|
172
|
-
}
|
|
173
|
-
return { embeddingProvider: "skip" };
|
|
174
|
-
}
|
|
175
|
-
const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);
|
|
176
|
-
const embeddingModels = models.filter(
|
|
177
|
-
(m) => m.includes("bge") || m.includes("embed") || m.includes("nomic")
|
|
178
|
-
);
|
|
179
|
-
let embeddingModel;
|
|
180
|
-
if (embeddingModels.length > 0) {
|
|
181
|
-
embeddingModel = await select({
|
|
182
|
-
message: "Select an embedding model:",
|
|
183
|
-
choices: [
|
|
184
|
-
...embeddingModels.map((m) => ({ name: m, value: m })),
|
|
185
|
-
{ name: "Enter model name manually", value: "__manual__" }
|
|
186
|
-
],
|
|
187
|
-
default: embeddingModels.includes(DEFAULT_OLLAMA_EMBEDDING_MODEL) ? DEFAULT_OLLAMA_EMBEDDING_MODEL : embeddingModels[0]
|
|
188
|
-
});
|
|
189
|
-
} else {
|
|
190
|
-
console.log(` No embedding models found. Pull one first: ollama pull ${DEFAULT_OLLAMA_EMBEDDING_MODEL}`);
|
|
191
|
-
embeddingModel = "__manual__";
|
|
192
|
-
}
|
|
193
|
-
if (embeddingModel === "__manual__") {
|
|
194
|
-
embeddingModel = await input({
|
|
195
|
-
message: "Embedding model name:",
|
|
196
|
-
default: DEFAULT_OLLAMA_EMBEDDING_MODEL
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
return { embeddingProvider: "ollama", embeddingModel };
|
|
200
|
-
}
|
|
201
|
-
async function selectCloudEmbeddingProvider() {
|
|
202
|
-
const provider = await select({
|
|
203
|
-
message: "Select a cloud embedding provider:",
|
|
204
|
-
choices: [
|
|
205
|
-
{ name: "OpenRouter (many models, one API key)", value: "openrouter" },
|
|
206
|
-
{ name: "OpenAI (text-embedding-3-small)", value: "openai" }
|
|
207
|
-
]
|
|
208
|
-
});
|
|
209
|
-
return selectCloudEmbeddingModel(provider);
|
|
210
|
-
}
|
|
211
|
-
async function selectCloudEmbeddingModel(provider) {
|
|
212
|
-
const apiKey = await password({
|
|
213
|
-
message: `Enter your ${provider === "openrouter" ? "OpenRouter" : "OpenAI"} API key:`,
|
|
214
|
-
mask: "*"
|
|
215
|
-
});
|
|
216
|
-
if (!apiKey) {
|
|
217
|
-
console.log(" No API key provided. Skipping embedding setup.");
|
|
218
|
-
return { embeddingProvider: "skip" };
|
|
219
|
-
}
|
|
220
|
-
let models = [];
|
|
221
|
-
try {
|
|
222
|
-
if (provider === "openrouter") {
|
|
223
|
-
const p = new OpenRouterEmbeddingProvider({ api_key: apiKey });
|
|
224
|
-
models = await p.listModels(PROVIDER_DETECT_TIMEOUT_MS);
|
|
225
|
-
} else {
|
|
226
|
-
const p = new OpenAIEmbeddingProvider({ api_key: apiKey });
|
|
227
|
-
models = await p.listModels(PROVIDER_DETECT_TIMEOUT_MS);
|
|
228
|
-
}
|
|
229
|
-
} catch {
|
|
230
|
-
}
|
|
231
|
-
let embeddingModel;
|
|
232
|
-
if (models.length > 0) {
|
|
233
|
-
const defaultModel = provider === "openrouter" ? `openai/${DEFAULT_OPENAI_EMBEDDING_MODEL}` : DEFAULT_OPENAI_EMBEDDING_MODEL;
|
|
234
|
-
embeddingModel = await select({
|
|
235
|
-
message: "Select an embedding model:",
|
|
236
|
-
choices: [
|
|
237
|
-
...models.map((m) => ({ name: m, value: m })),
|
|
238
|
-
{ name: "Enter model ID manually", value: "__manual__" }
|
|
239
|
-
],
|
|
240
|
-
default: models.includes(defaultModel) ? defaultModel : models[0]
|
|
241
|
-
});
|
|
242
|
-
} else {
|
|
243
|
-
console.log(" Could not fetch model list. Enter the model ID manually.");
|
|
244
|
-
embeddingModel = "__manual__";
|
|
245
|
-
}
|
|
246
|
-
if (embeddingModel === "__manual__") {
|
|
247
|
-
const defaultModel = provider === "openrouter" ? `openai/${DEFAULT_OPENAI_EMBEDDING_MODEL}` : DEFAULT_OPENAI_EMBEDDING_MODEL;
|
|
248
|
-
embeddingModel = await input({
|
|
249
|
-
message: "Embedding model ID:",
|
|
250
|
-
default: defaultModel
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
return {
|
|
254
|
-
embeddingProvider: provider,
|
|
255
|
-
embeddingModel,
|
|
256
|
-
embeddingApiKey: apiKey
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
async function runWizard() {
|
|
260
|
-
const intelligenceAnswers = await selectIntelligenceProvider();
|
|
261
|
-
const embeddingChoice = await select({
|
|
262
|
-
message: "How would you like to generate embeddings?",
|
|
263
|
-
choices: [
|
|
264
|
-
{ name: "Ollama (local, free, recommended)", value: "ollama" },
|
|
265
|
-
{ name: "Cloud provider (OpenRouter or OpenAI)", value: "cloud" },
|
|
266
|
-
{ name: "Skip for now (embeddings disabled)", value: "skip" }
|
|
267
|
-
],
|
|
268
|
-
default: "ollama"
|
|
269
|
-
});
|
|
270
|
-
let embeddingAnswers;
|
|
271
|
-
if (embeddingChoice === "skip") {
|
|
272
|
-
console.log("");
|
|
273
|
-
console.log(" Skipping embedding setup. Semantic search and context injection");
|
|
274
|
-
console.log(" will be disabled until you configure an embedding provider.");
|
|
275
|
-
console.log(" Run `myco config` later to set one up.");
|
|
276
|
-
console.log("");
|
|
277
|
-
embeddingAnswers = { embeddingProvider: "skip" };
|
|
278
|
-
} else if (embeddingChoice === "cloud") {
|
|
279
|
-
embeddingAnswers = await selectCloudEmbeddingProvider();
|
|
280
|
-
} else {
|
|
281
|
-
embeddingAnswers = await selectOllamaEmbeddingModel();
|
|
282
|
-
}
|
|
283
|
-
return {
|
|
284
|
-
...intelligenceAnswers,
|
|
285
|
-
...embeddingAnswers
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
export {
|
|
289
|
-
buildAgentConfig,
|
|
290
|
-
buildEmbeddingConfig,
|
|
291
|
-
printBanner,
|
|
292
|
-
runWizard
|
|
293
|
-
};
|
|
294
|
-
//# sourceMappingURL=init-wizard-5CH2FD76.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/init-wizard.ts"],"sourcesContent":["/**\n * Interactive init wizard for `myco init`.\n * Collects intelligence provider and embedding provider configuration\n * from the user via @inquirer/prompts.\n * The pure `buildEmbeddingConfig` and `buildAgentConfig` functions are\n * exported separately for testing.\n */\nimport { select, input, password } from '@inquirer/prompts';\nimport { OllamaBackend } from '../intelligence/ollama.js';\nimport { LmStudioBackend } from '../intelligence/lm-studio.js';\nimport { OpenRouterEmbeddingProvider } from './providers/openrouter.js';\nimport { OpenAIEmbeddingProvider } from './providers/openai-embeddings.js';\nimport {\n PROVIDER_DETECT_TIMEOUT_MS,\n DEFAULT_OLLAMA_EMBEDDING_MODEL,\n DEFAULT_OPENAI_EMBEDDING_MODEL,\n RECOMMENDED_LOCAL_CONTEXT_WINDOW,\n} from '../constants.js';\nimport { getPluginVersion } from '../version.js';\n\n// --- Types ---\n\nexport interface WizardAnswers {\n // Intelligence provider\n intelligenceProvider: 'cloud' | 'ollama' | 'lmstudio';\n intelligenceModel?: string;\n intelligenceBaseUrl?: string;\n // Embedding provider\n embeddingProvider: 'ollama' | 'openrouter' | 'openai' | 'skip';\n embeddingModel?: string;\n embeddingApiKey?: string;\n}\n\nexport interface EmbeddingConfig {\n provider: string;\n model: string;\n}\n\n// --- Pure functions ---\n\n/** Convert wizard answers into a config object suitable for MycoConfigSchema embedding overrides. */\nexport function buildEmbeddingConfig(answers: WizardAnswers): EmbeddingConfig {\n if (answers.embeddingProvider === 'skip') {\n return {\n provider: 'ollama',\n model: DEFAULT_OLLAMA_EMBEDDING_MODEL,\n };\n }\n\n return {\n provider: answers.embeddingProvider,\n model: answers.embeddingModel ?? DEFAULT_OLLAMA_EMBEDDING_MODEL,\n };\n}\n\n/** Convert wizard answers into an agent config object for myco.yaml. */\nexport function buildAgentConfig(\n answers: WizardAnswers,\n): { provider?: { type: string; base_url?: string; model?: string }; model?: string } | null {\n if (answers.intelligenceProvider === 'cloud') {\n return { provider: { type: 'cloud' } };\n }\n\n const provider: { type: string; base_url?: string; model?: string } = {\n type: answers.intelligenceProvider,\n };\n if (answers.intelligenceBaseUrl) provider.base_url = answers.intelligenceBaseUrl;\n if (answers.intelligenceModel) provider.model = answers.intelligenceModel;\n\n return {\n provider,\n model: answers.intelligenceModel,\n };\n}\n\n// --- Interactive wizard ---\n\n/** Print the welcome banner with the current package version. */\nexport function printBanner(): void {\n const version = getPluginVersion();\n console.log('');\n console.log(' 🍄 Myco');\n console.log(` v${version} — Collective Agent Intelligence`);\n console.log(' ─────────────────────────────────────────────');\n console.log('');\n}\n\n/** Platform-specific Ollama install instructions. */\nfunction ollamaInstallHint(): string {\n if (process.platform === 'darwin') {\n return 'Install: brew install ollama && ollama serve';\n }\n if (process.platform === 'linux') {\n return 'Install: curl -fsSL https://ollama.com/install.sh | sh';\n }\n return 'Install: https://ollama.com/download';\n}\n\n/** Print local model context window recommendation. */\nfunction printLocalModelTip(): void {\n console.log('');\n console.log(` Tip: For local models, we recommend an ${RECOMMENDED_LOCAL_CONTEXT_WINDOW / 1024}K context window.`);\n console.log(' Set in myco.yaml under agent.tasks or configure via the dashboard.');\n console.log('');\n}\n\n// --- Intelligence provider step ---\n\n/** Select a model from a local provider (Ollama or LM Studio). */\nasync function selectLocalIntelligenceModel(\n backend: OllamaBackend | LmStudioBackend,\n providerName: string,\n): Promise<{ model?: string; baseUrl?: string }> {\n const available = await backend.isAvailable();\n\n if (!available) {\n console.log('');\n console.log(` ${providerName} is not running.`);\n if (providerName === 'Ollama') {\n console.log(` ${ollamaInstallHint()}`);\n } else {\n console.log(' Start LM Studio and enable the local server.');\n }\n console.log('');\n\n const action = await select({\n message: `${providerName} is not available. What would you like to do?`,\n choices: [\n { name: `Retry (after starting ${providerName})`, value: 'retry' },\n { name: 'Continue without selecting a model', value: 'skip' },\n ],\n });\n\n if (action === 'retry') {\n return selectLocalIntelligenceModel(backend, providerName);\n }\n return {};\n }\n\n const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);\n\n let model: string;\n\n if (models.length > 0) {\n model = await select({\n message: `Select an intelligence model from ${providerName}:`,\n choices: [\n ...models.map((m) => ({ name: m, value: m })),\n { name: 'Enter model name manually', value: '__manual__' },\n ],\n default: models[0],\n });\n } else {\n console.log(` No models found in ${providerName}.`);\n model = '__manual__';\n }\n\n if (model === '__manual__') {\n model = await input({\n message: 'Model name:',\n });\n }\n\n printLocalModelTip();\n\n return { model: model || undefined };\n}\n\n/** Run the intelligence provider selection step. */\nasync function selectIntelligenceProvider(): Promise<Pick<WizardAnswers, 'intelligenceProvider' | 'intelligenceModel' | 'intelligenceBaseUrl'>> {\n const provider = await select<'cloud' | 'ollama' | 'lmstudio'>({\n message: 'How should Myco run intelligence tasks (extraction, summarization)?',\n choices: [\n { name: 'Cloud (Claude) — fast, requires Anthropic API key in env', value: 'cloud' },\n { name: 'Ollama (local, free)', value: 'ollama' },\n { name: 'LM Studio (local)', value: 'lmstudio' },\n ],\n default: 'cloud',\n });\n\n if (provider === 'cloud') {\n return { intelligenceProvider: 'cloud' };\n }\n\n if (provider === 'ollama') {\n const backend = new OllamaBackend();\n const result = await selectLocalIntelligenceModel(backend, 'Ollama');\n return {\n intelligenceProvider: 'ollama',\n intelligenceModel: result.model,\n };\n }\n\n // LM Studio\n const backend = new LmStudioBackend();\n const result = await selectLocalIntelligenceModel(backend, 'LM Studio');\n return {\n intelligenceProvider: 'lmstudio',\n intelligenceModel: result.model,\n intelligenceBaseUrl: result.baseUrl,\n };\n}\n\n// --- Embedding provider step ---\n\n/** Prompt the user to select an embedding model from Ollama. */\nasync function selectOllamaEmbeddingModel(): Promise<Pick<WizardAnswers, 'embeddingProvider' | 'embeddingModel'>> {\n const backend = new OllamaBackend();\n const available = await backend.isAvailable();\n\n if (!available) {\n console.log('');\n console.log(` Ollama is not running. ${ollamaInstallHint()}`);\n console.log('');\n\n const action = await select({\n message: 'Ollama is not available. What would you like to do?',\n choices: [\n { name: 'Retry (after starting Ollama)', value: 'retry' },\n { name: 'Switch to a cloud provider', value: 'switch' },\n { name: 'Skip embedding setup', value: 'skip' },\n ],\n });\n\n if (action === 'retry') {\n return selectOllamaEmbeddingModel();\n }\n if (action === 'switch') {\n return selectCloudEmbeddingProvider();\n }\n return { embeddingProvider: 'skip' };\n }\n\n const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);\n const embeddingModels = models.filter(\n (m) => m.includes('bge') || m.includes('embed') || m.includes('nomic'),\n );\n\n let embeddingModel: string;\n\n if (embeddingModels.length > 0) {\n embeddingModel = await select({\n message: 'Select an embedding model:',\n choices: [\n ...embeddingModels.map((m) => ({ name: m, value: m })),\n { name: 'Enter model name manually', value: '__manual__' },\n ],\n default: embeddingModels.includes(DEFAULT_OLLAMA_EMBEDDING_MODEL)\n ? DEFAULT_OLLAMA_EMBEDDING_MODEL\n : embeddingModels[0],\n });\n } else {\n console.log(` No embedding models found. Pull one first: ollama pull ${DEFAULT_OLLAMA_EMBEDDING_MODEL}`);\n embeddingModel = '__manual__';\n }\n\n if (embeddingModel === '__manual__') {\n embeddingModel = await input({\n message: 'Embedding model name:',\n default: DEFAULT_OLLAMA_EMBEDDING_MODEL,\n });\n }\n\n return { embeddingProvider: 'ollama', embeddingModel };\n}\n\n/** Prompt the user to pick between OpenRouter and OpenAI. */\nasync function selectCloudEmbeddingProvider(): Promise<Pick<WizardAnswers, 'embeddingProvider' | 'embeddingModel' | 'embeddingApiKey'>> {\n const provider = await select<'openrouter' | 'openai'>({\n message: 'Select a cloud embedding provider:',\n choices: [\n { name: 'OpenRouter (many models, one API key)', value: 'openrouter' },\n { name: 'OpenAI (text-embedding-3-small)', value: 'openai' },\n ],\n });\n\n return selectCloudEmbeddingModel(provider);\n}\n\n/** Collect API key and model for a cloud embedding provider. */\nasync function selectCloudEmbeddingModel(\n provider: 'openrouter' | 'openai',\n): Promise<Pick<WizardAnswers, 'embeddingProvider' | 'embeddingModel' | 'embeddingApiKey'>> {\n const apiKey = await password({\n message: `Enter your ${provider === 'openrouter' ? 'OpenRouter' : 'OpenAI'} API key:`,\n mask: '*',\n });\n\n if (!apiKey) {\n console.log(' No API key provided. Skipping embedding setup.');\n return { embeddingProvider: 'skip' };\n }\n\n // Try to list models with the provided key\n let models: string[] = [];\n try {\n if (provider === 'openrouter') {\n const p = new OpenRouterEmbeddingProvider({ api_key: apiKey });\n models = await p.listModels(PROVIDER_DETECT_TIMEOUT_MS);\n } else {\n const p = new OpenAIEmbeddingProvider({ api_key: apiKey });\n models = await p.listModels(PROVIDER_DETECT_TIMEOUT_MS);\n }\n } catch {\n // Fall through to manual input\n }\n\n let embeddingModel: string;\n\n if (models.length > 0) {\n const defaultModel = provider === 'openrouter'\n ? `openai/${DEFAULT_OPENAI_EMBEDDING_MODEL}`\n : DEFAULT_OPENAI_EMBEDDING_MODEL;\n\n embeddingModel = await select({\n message: 'Select an embedding model:',\n choices: [\n ...models.map((m) => ({ name: m, value: m })),\n { name: 'Enter model ID manually', value: '__manual__' },\n ],\n default: models.includes(defaultModel) ? defaultModel : models[0],\n });\n } else {\n console.log(' Could not fetch model list. Enter the model ID manually.');\n embeddingModel = '__manual__';\n }\n\n if (embeddingModel === '__manual__') {\n const defaultModel = provider === 'openrouter'\n ? `openai/${DEFAULT_OPENAI_EMBEDDING_MODEL}`\n : DEFAULT_OPENAI_EMBEDDING_MODEL;\n\n embeddingModel = await input({\n message: 'Embedding model ID:',\n default: defaultModel,\n });\n }\n\n return {\n embeddingProvider: provider,\n embeddingModel,\n embeddingApiKey: apiKey,\n };\n}\n\n// --- Main wizard ---\n\n/** Run the interactive init wizard. Returns intelligence and embedding configuration choices. */\nexport async function runWizard(): Promise<WizardAnswers> {\n\n // Step 1: Intelligence provider\n const intelligenceAnswers = await selectIntelligenceProvider();\n\n // Step 2: Embedding provider\n const embeddingChoice = await select<'ollama' | 'cloud' | 'skip'>({\n message: 'How would you like to generate embeddings?',\n choices: [\n { name: 'Ollama (local, free, recommended)', value: 'ollama' },\n { name: 'Cloud provider (OpenRouter or OpenAI)', value: 'cloud' },\n { name: 'Skip for now (embeddings disabled)', value: 'skip' },\n ],\n default: 'ollama',\n });\n\n let embeddingAnswers: Pick<WizardAnswers, 'embeddingProvider' | 'embeddingModel' | 'embeddingApiKey'>;\n\n if (embeddingChoice === 'skip') {\n console.log('');\n console.log(' Skipping embedding setup. Semantic search and context injection');\n console.log(' will be disabled until you configure an embedding provider.');\n console.log(' Run `myco config` later to set one up.');\n console.log('');\n embeddingAnswers = { embeddingProvider: 'skip' };\n } else if (embeddingChoice === 'cloud') {\n embeddingAnswers = await selectCloudEmbeddingProvider();\n } else {\n embeddingAnswers = await selectOllamaEmbeddingModel();\n }\n\n return {\n ...intelligenceAnswers,\n ...embeddingAnswers,\n };\n}\n"],"mappings":"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","names":["backend","result"]}
|