@goondocks/myco 0.17.0 → 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.
Files changed (171) hide show
  1. package/README.md +1 -1
  2. package/dist/{agent-run-ZDHXORE2.js → agent-run-7AYHXIEF.js} +7 -7
  3. package/dist/{agent-tasks-IPUWMMDZ.js → agent-tasks-UUIFKBD4.js} +7 -7
  4. package/dist/{chunk-VGVRBSLC.js → chunk-25WHTV4N.js} +2 -2
  5. package/dist/{chunk-ZUSTCXHT.js → chunk-3NCVCGUZ.js} +3 -3
  6. package/dist/chunk-5NFJTZ64.js +14 -0
  7. package/dist/chunk-5NFJTZ64.js.map +1 -0
  8. package/dist/{chunk-2WRXLYG6.js → chunk-5ZISXCDC.js} +2 -2
  9. package/dist/{chunk-6SDC6V3N.js → chunk-7DAH5GLC.js} +1 -5
  10. package/dist/{chunk-6SDC6V3N.js.map → chunk-7DAH5GLC.js.map} +1 -1
  11. package/dist/{chunk-XVWJ273L.js → chunk-BZDZORVP.js} +4 -4
  12. package/dist/{chunk-KKEMVH6D.js → chunk-C3C5QVLK.js} +2 -2
  13. package/dist/{chunk-MSM775XQ.js → chunk-CTF7TQMJ.js} +4 -4
  14. package/dist/{chunk-CPL76CYD.js → chunk-DT42247G.js} +3 -3
  15. package/dist/{chunk-VQQ57UPG.js → chunk-F6C4IC6R.js} +4 -4
  16. package/dist/{chunk-VQQ57UPG.js.map → chunk-F6C4IC6R.js.map} +1 -1
  17. package/dist/{chunk-SODRR3HE.js → chunk-GFR542SM.js} +1 -1
  18. package/dist/chunk-GFR542SM.js.map +1 -0
  19. package/dist/{chunk-QQ7CXA7Q.js → chunk-HPZ7YAMA.js} +95 -10
  20. package/dist/{chunk-QQ7CXA7Q.js.map → chunk-HPZ7YAMA.js.map} +1 -1
  21. package/dist/{chunk-GBYLHPML.js → chunk-IGBHLFV5.js} +2 -2
  22. package/dist/{chunk-DKSQMH5X.js → chunk-ML6GTPZU.js} +2 -2
  23. package/dist/{chunk-QBB6LX57.js → chunk-NUSTG3BH.js} +3 -3
  24. package/dist/{chunk-2IJ6C63F.js → chunk-RKPTMHED.js} +2 -2
  25. package/dist/{chunk-YTOD6L6N.js → chunk-RMJPQZGF.js} +97 -7
  26. package/dist/chunk-RMJPQZGF.js.map +1 -0
  27. package/dist/{chunk-PFF4KB4O.js → chunk-SI5BBQAT.js} +2 -2
  28. package/dist/{chunk-OGNEW5CN.js → chunk-UTLWSKDV.js} +2 -2
  29. package/dist/{chunk-4JPUC6RL.js → chunk-VVGZL2HX.js} +2 -3
  30. package/dist/{chunk-4JPUC6RL.js.map → chunk-VVGZL2HX.js.map} +1 -1
  31. package/dist/{chunk-FEX6ALLH.js → chunk-XD3NEN3Q.js} +29 -3
  32. package/dist/chunk-XD3NEN3Q.js.map +1 -0
  33. package/dist/{chunk-U63GDHYJ.js → chunk-XZWFMMJR.js} +3 -3
  34. package/dist/{chunk-UDBCAFXS.js → chunk-ZSJPI5MS.js} +2 -2
  35. package/dist/{cli-BRDOPJW3.js → cli-WJVYP2QT.js} +40 -40
  36. package/dist/{client-AQZMD3LB.js → client-LZ3ZR4HC.js} +4 -4
  37. package/dist/{config-K3CJEFFO.js → config-ZQIMG3FB.js} +4 -4
  38. package/dist/{detect-providers-OE6HWW3M.js → detect-providers-C64L3QET.js} +4 -4
  39. package/dist/{doctor-YOUCIJJY.js → doctor-XEPBNHM3.js} +12 -12
  40. package/dist/doctor-XEPBNHM3.js.map +1 -0
  41. package/dist/{executor-UYNV4EOQ.js → executor-NXKJU5KW.js} +29 -110
  42. package/dist/executor-NXKJU5KW.js.map +1 -0
  43. package/dist/{init-MTMEFG4E.js → init-BHVQAQ27.js} +55 -73
  44. package/dist/init-BHVQAQ27.js.map +1 -0
  45. package/dist/{installer-CTWQB4RS.js → installer-45ZLP2RP.js} +2 -2
  46. package/dist/{llm-PGETQHZ2.js → llm-KTD6SR55.js} +4 -7
  47. package/dist/{loader-J56KP27U.js → loader-NEX3UF6U.js} +3 -3
  48. package/dist/{loader-AVWL7PNO.js → loader-SHRKUKOS.js} +3 -3
  49. package/dist/{main-ZIMYW2AB.js → main-YFVBIRRK.js} +153 -58
  50. package/dist/main-YFVBIRRK.js.map +1 -0
  51. package/dist/{open-77QXL7VY.js → open-2U7ZRGA3.js} +11 -10
  52. package/dist/open-2U7ZRGA3.js.map +1 -0
  53. package/dist/open-browser-EBKBAYSM.js +9 -0
  54. package/dist/{post-compact-CA7O7QPL.js → post-compact-QIBMEWL3.js} +6 -6
  55. package/dist/{post-tool-use-JNXJIGNK.js → post-tool-use-ICGFXDVY.js} +5 -5
  56. package/dist/{post-tool-use-failure-V52CZWVZ.js → post-tool-use-failure-C7TLH3XQ.js} +6 -6
  57. package/dist/{pre-compact-J2GSDQCJ.js → pre-compact-IF7K4TQK.js} +6 -6
  58. package/dist/{provider-check-CESRPIY5.js → provider-check-LTLQ6BUZ.js} +4 -4
  59. package/dist/{registry-SPKP2WLI.js → registry-TFQ22Z7N.js} +4 -4
  60. package/dist/{remove-ODPLWK7O.js → remove-FBGM2QVJ.js} +8 -8
  61. package/dist/{resolution-events-CLDXZF67.js → resolution-events-HGKIJOTA.js} +4 -4
  62. package/dist/{restart-6KKZODOI.js → restart-TQEECRNW.js} +8 -8
  63. package/dist/{search-U6N2DSOI.js → search-NN5FC4Z6.js} +8 -8
  64. package/dist/{server-SP4G7MY7.js → server-XMWJ4GF7.js} +4 -4
  65. package/dist/{session-6R3RNVKD.js → session-GLPAFYPO.js} +9 -9
  66. package/dist/{session-end-TCFCYDBL.js → session-end-TI3ILRBC.js} +5 -5
  67. package/dist/{session-start-XXN2TVNI.js → session-start-PJLJDVJJ.js} +10 -10
  68. package/dist/{setup-llm-GISFI73Z.js → setup-llm-AQSWLXCZ.js} +9 -9
  69. package/dist/src/cli.js +1 -1
  70. package/dist/src/daemon/main.js +1 -1
  71. package/dist/src/hooks/post-tool-use.js +1 -1
  72. package/dist/src/hooks/session-end.js +1 -1
  73. package/dist/src/hooks/session-start.js +1 -1
  74. package/dist/src/hooks/stop.js +1 -1
  75. package/dist/src/hooks/user-prompt-submit.js +1 -1
  76. package/dist/src/mcp/server.js +1 -1
  77. package/dist/src/symbionts/templates/claude-code/hooks.json +12 -12
  78. package/dist/src/symbionts/templates/codex/hooks.json +4 -4
  79. package/dist/src/symbionts/templates/cursor/hooks.json +9 -9
  80. package/dist/src/symbionts/templates/gemini/hooks.json +6 -6
  81. package/dist/src/symbionts/templates/opencode/plugin.ts +53 -10
  82. package/dist/src/symbionts/templates/vscode-copilot/hooks.json +7 -7
  83. package/dist/src/symbionts/templates/windsurf/hooks.json +4 -4
  84. package/dist/{stats-MYQD4OVD.js → stats-BISBIBXZ.js} +9 -9
  85. package/dist/{stop-K6TDJORY.js → stop-47BJ42EO.js} +5 -5
  86. package/dist/{stop-failure-U635O5A3.js → stop-failure-VU5BTLWX.js} +6 -6
  87. package/dist/{subagent-start-LLGQBC5Q.js → subagent-start-SPTKQRHU.js} +6 -6
  88. package/dist/{subagent-stop-BO3GZWXD.js → subagent-stop-UU75BYLC.js} +6 -6
  89. package/dist/{task-completed-3ZJHSI2E.js → task-completed-MVDO7TZF.js} +6 -6
  90. package/dist/{team-OJLQCVE3.js → team-7X64J4Y6.js} +4 -4
  91. package/dist/ui/assets/index-CRmkSi63.css +1 -0
  92. package/dist/ui/assets/index-rpmSpJpm.js +842 -0
  93. package/dist/ui/index.html +2 -2
  94. package/dist/{update-HR7WMESA.js → update-DA7VEXOS.js} +8 -8
  95. package/dist/{user-prompt-submit-NM73R4I3.js → user-prompt-submit-ADZ4NTVO.js} +5 -5
  96. package/dist/{verify-PSERIZPF.js → verify-QYSERHF7.js} +5 -8
  97. package/dist/{verify-PSERIZPF.js.map → verify-QYSERHF7.js.map} +1 -1
  98. package/dist/{version-YCODQZSX.js → version-A72TAL2J.js} +2 -2
  99. package/package.json +6 -2
  100. package/dist/chunk-FEX6ALLH.js.map +0 -1
  101. package/dist/chunk-KGL5QSDN.js +0 -66
  102. package/dist/chunk-KGL5QSDN.js.map +0 -1
  103. package/dist/chunk-SODRR3HE.js.map +0 -1
  104. package/dist/chunk-U3SSOSIR.js +0 -26
  105. package/dist/chunk-U3SSOSIR.js.map +0 -1
  106. package/dist/chunk-Y7QCKCEJ.js +0 -26
  107. package/dist/chunk-Y7QCKCEJ.js.map +0 -1
  108. package/dist/chunk-YTOD6L6N.js.map +0 -1
  109. package/dist/doctor-YOUCIJJY.js.map +0 -1
  110. package/dist/executor-UYNV4EOQ.js.map +0 -1
  111. package/dist/init-MTMEFG4E.js.map +0 -1
  112. package/dist/init-wizard-ZS3CV6CM.js +0 -294
  113. package/dist/init-wizard-ZS3CV6CM.js.map +0 -1
  114. package/dist/main-ZIMYW2AB.js.map +0 -1
  115. package/dist/open-77QXL7VY.js.map +0 -1
  116. package/dist/openai-embeddings-LZKY6RV5.js +0 -14
  117. package/dist/openrouter-UTOZG6Z5.js +0 -14
  118. package/dist/ui/assets/index-2UyTdjlV.js +0 -842
  119. package/dist/ui/assets/index-Cts1wLEW.css +0 -1
  120. package/dist/version-YCODQZSX.js.map +0 -1
  121. /package/dist/{agent-run-ZDHXORE2.js.map → agent-run-7AYHXIEF.js.map} +0 -0
  122. /package/dist/{agent-tasks-IPUWMMDZ.js.map → agent-tasks-UUIFKBD4.js.map} +0 -0
  123. /package/dist/{chunk-VGVRBSLC.js.map → chunk-25WHTV4N.js.map} +0 -0
  124. /package/dist/{chunk-ZUSTCXHT.js.map → chunk-3NCVCGUZ.js.map} +0 -0
  125. /package/dist/{chunk-2WRXLYG6.js.map → chunk-5ZISXCDC.js.map} +0 -0
  126. /package/dist/{chunk-XVWJ273L.js.map → chunk-BZDZORVP.js.map} +0 -0
  127. /package/dist/{chunk-KKEMVH6D.js.map → chunk-C3C5QVLK.js.map} +0 -0
  128. /package/dist/{chunk-MSM775XQ.js.map → chunk-CTF7TQMJ.js.map} +0 -0
  129. /package/dist/{chunk-CPL76CYD.js.map → chunk-DT42247G.js.map} +0 -0
  130. /package/dist/{chunk-GBYLHPML.js.map → chunk-IGBHLFV5.js.map} +0 -0
  131. /package/dist/{chunk-DKSQMH5X.js.map → chunk-ML6GTPZU.js.map} +0 -0
  132. /package/dist/{chunk-QBB6LX57.js.map → chunk-NUSTG3BH.js.map} +0 -0
  133. /package/dist/{chunk-2IJ6C63F.js.map → chunk-RKPTMHED.js.map} +0 -0
  134. /package/dist/{chunk-PFF4KB4O.js.map → chunk-SI5BBQAT.js.map} +0 -0
  135. /package/dist/{chunk-OGNEW5CN.js.map → chunk-UTLWSKDV.js.map} +0 -0
  136. /package/dist/{chunk-U63GDHYJ.js.map → chunk-XZWFMMJR.js.map} +0 -0
  137. /package/dist/{chunk-UDBCAFXS.js.map → chunk-ZSJPI5MS.js.map} +0 -0
  138. /package/dist/{cli-BRDOPJW3.js.map → cli-WJVYP2QT.js.map} +0 -0
  139. /package/dist/{client-AQZMD3LB.js.map → client-LZ3ZR4HC.js.map} +0 -0
  140. /package/dist/{config-K3CJEFFO.js.map → config-ZQIMG3FB.js.map} +0 -0
  141. /package/dist/{detect-providers-OE6HWW3M.js.map → detect-providers-C64L3QET.js.map} +0 -0
  142. /package/dist/{installer-CTWQB4RS.js.map → installer-45ZLP2RP.js.map} +0 -0
  143. /package/dist/{llm-PGETQHZ2.js.map → llm-KTD6SR55.js.map} +0 -0
  144. /package/dist/{loader-AVWL7PNO.js.map → loader-NEX3UF6U.js.map} +0 -0
  145. /package/dist/{loader-J56KP27U.js.map → loader-SHRKUKOS.js.map} +0 -0
  146. /package/dist/{openai-embeddings-LZKY6RV5.js.map → open-browser-EBKBAYSM.js.map} +0 -0
  147. /package/dist/{post-compact-CA7O7QPL.js.map → post-compact-QIBMEWL3.js.map} +0 -0
  148. /package/dist/{post-tool-use-JNXJIGNK.js.map → post-tool-use-ICGFXDVY.js.map} +0 -0
  149. /package/dist/{post-tool-use-failure-V52CZWVZ.js.map → post-tool-use-failure-C7TLH3XQ.js.map} +0 -0
  150. /package/dist/{pre-compact-J2GSDQCJ.js.map → pre-compact-IF7K4TQK.js.map} +0 -0
  151. /package/dist/{openrouter-UTOZG6Z5.js.map → provider-check-LTLQ6BUZ.js.map} +0 -0
  152. /package/dist/{provider-check-CESRPIY5.js.map → registry-TFQ22Z7N.js.map} +0 -0
  153. /package/dist/{remove-ODPLWK7O.js.map → remove-FBGM2QVJ.js.map} +0 -0
  154. /package/dist/{registry-SPKP2WLI.js.map → resolution-events-HGKIJOTA.js.map} +0 -0
  155. /package/dist/{restart-6KKZODOI.js.map → restart-TQEECRNW.js.map} +0 -0
  156. /package/dist/{search-U6N2DSOI.js.map → search-NN5FC4Z6.js.map} +0 -0
  157. /package/dist/{server-SP4G7MY7.js.map → server-XMWJ4GF7.js.map} +0 -0
  158. /package/dist/{session-6R3RNVKD.js.map → session-GLPAFYPO.js.map} +0 -0
  159. /package/dist/{session-end-TCFCYDBL.js.map → session-end-TI3ILRBC.js.map} +0 -0
  160. /package/dist/{session-start-XXN2TVNI.js.map → session-start-PJLJDVJJ.js.map} +0 -0
  161. /package/dist/{setup-llm-GISFI73Z.js.map → setup-llm-AQSWLXCZ.js.map} +0 -0
  162. /package/dist/{stats-MYQD4OVD.js.map → stats-BISBIBXZ.js.map} +0 -0
  163. /package/dist/{stop-K6TDJORY.js.map → stop-47BJ42EO.js.map} +0 -0
  164. /package/dist/{stop-failure-U635O5A3.js.map → stop-failure-VU5BTLWX.js.map} +0 -0
  165. /package/dist/{subagent-start-LLGQBC5Q.js.map → subagent-start-SPTKQRHU.js.map} +0 -0
  166. /package/dist/{subagent-stop-BO3GZWXD.js.map → subagent-stop-UU75BYLC.js.map} +0 -0
  167. /package/dist/{task-completed-3ZJHSI2E.js.map → task-completed-MVDO7TZF.js.map} +0 -0
  168. /package/dist/{team-OJLQCVE3.js.map → team-7X64J4Y6.js.map} +0 -0
  169. /package/dist/{update-HR7WMESA.js.map → update-DA7VEXOS.js.map} +0 -0
  170. /package/dist/{user-prompt-submit-NM73R4I3.js.map → user-prompt-submit-ADZ4NTVO.js.map} +0 -0
  171. /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-PFF4KB4O.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-ZS3CV6CM.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"]}