volute 0.40.1 → 0.41.0

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 (155) hide show
  1. package/README.md +2 -2
  2. package/dist/{accept-IVHOHXQS.js → accept-AHAOUFBK.js} +1 -1
  3. package/dist/{activity-events-DS4QRWBY.js → activity-events-EQGBUEZ7.js} +4 -4
  4. package/dist/{ai-service-AUWIPWLP.js → ai-service-ZHEPFC3U.js} +5 -5
  5. package/dist/{api-client-NFM6GX2N.js → api-client-LC5YRA32.js} +1 -1
  6. package/dist/{archive-UDHFZN4G.js → archive-LJAXDDEY.js} +4 -4
  7. package/dist/{auth-X6ZITZ7D.js → auth-VYW2ECCE.js} +5 -5
  8. package/dist/{bridge-MSZC4HUT.js → bridge-F3ZJEKDN.js} +1 -1
  9. package/dist/{chat-JD3TJINV.js → chat-FO722GU2.js} +9 -9
  10. package/dist/{chunk-4UMXOMZ6.js → chunk-2I7OKOYV.js} +2 -2
  11. package/dist/{chunk-3Y7UDHO7.js → chunk-2R4JIZCB.js} +3 -3
  12. package/dist/{chunk-QYI65HCL.js → chunk-2RQIIKFC.js} +2 -2
  13. package/dist/{chunk-6SYHHEQ7.js → chunk-4ED2DBNC.js} +1 -1
  14. package/dist/{chunk-E25SO3QW.js → chunk-6TPRURK5.js} +3 -3
  15. package/dist/{chunk-ITH5ZLZJ.js → chunk-6ZAT5PYV.js} +1 -1
  16. package/dist/{chunk-LZ6CQYRO.js → chunk-AXNAK3HT.js} +10 -8
  17. package/dist/{chunk-PKGA23XM.js → chunk-CYUNO4BM.js} +1 -1
  18. package/dist/{chunk-MNUXL4XN.js → chunk-FEQPNCXB.js} +1 -1
  19. package/dist/{chunk-5EVW4KOD.js → chunk-FU5YDH6Q.js} +3 -3
  20. package/dist/{chunk-NERYUSER.js → chunk-GMFCSXWB.js} +1 -1
  21. package/dist/{chunk-YHWGN4FX.js → chunk-GSOEUMVO.js} +1 -1
  22. package/dist/{chunk-QV7P3TYO.js → chunk-JIGVTFIR.js} +5 -5
  23. package/dist/chunk-K3NQKI34.js +10 -0
  24. package/dist/{chunk-2HZRJ35V.js → chunk-MHFAWJCC.js} +1 -1
  25. package/dist/{chunk-I57LLNAQ.js → chunk-MU2B7A3L.js} +1 -1
  26. package/dist/{chunk-DNU6XLE2.js → chunk-N64Q7FMP.js} +1 -1
  27. package/dist/{chunk-SVXOBKQY.js → chunk-OQ7UEW67.js} +2 -2
  28. package/dist/{chunk-ANSTTB55.js → chunk-PP5CGT2P.js} +20 -21
  29. package/dist/{chunk-TOANT6FD.js → chunk-SWY4DJ67.js} +2 -2
  30. package/dist/{chunk-KMHC36CA.js → chunk-U7UASV36.js} +1 -1
  31. package/dist/{chunk-KAB6UGOL.js → chunk-UU3Q65US.js} +1 -1
  32. package/dist/{chunk-JYQQDI3M.js → chunk-V67XMNGP.js} +2 -2
  33. package/dist/{chunk-B4WPXYPI.js → chunk-VDODEQSJ.js} +6 -1
  34. package/dist/{chunk-S4SXBQ7F.js → chunk-VK2YD7VJ.js} +43 -35
  35. package/dist/{chunk-BLAXARBZ.js → chunk-W5Z2H3LU.js} +194 -1313
  36. package/dist/{chunk-46DYYHN6.js → chunk-WSRGS4XP.js} +34 -0
  37. package/dist/{chunk-AEAZRTEV.js → chunk-Y2XLASFJ.js} +1 -1
  38. package/dist/chunk-YATR5BXD.js +1212 -0
  39. package/dist/{chunk-YTNBO7S6.js → chunk-YN6ISG7A.js} +11 -11
  40. package/dist/cli.js +24 -24
  41. package/dist/{clock-YLDJUKBW.js → clock-BMLJ2TR6.js} +3 -3
  42. package/dist/{cloud-sync-MAQCJEFJ.js → cloud-sync-GV6O2HN2.js} +19 -18
  43. package/dist/{config-PO4EZLIK.js → config-QB7W3Z7P.js} +4 -4
  44. package/dist/connectors/discord-bridge.js +1 -1
  45. package/dist/connectors/slack-bridge.js +1 -1
  46. package/dist/connectors/telegram-bridge.js +1 -1
  47. package/dist/{conversations-AYLXPOGC.js → conversations-KW7IYESK.js} +5 -5
  48. package/dist/{create-ZMTGINV3.js → create-C3BBFYV7.js} +1 -1
  49. package/dist/{create-T4UJ64WB.js → create-CTPXWFTL.js} +5 -5
  50. package/dist/{daemon-client-H6MEKK2W.js → daemon-client-2MIPKY3E.js} +1 -1
  51. package/dist/{daemon-restart-LP2DR24J.js → daemon-restart-W47YDE5E.js} +9 -9
  52. package/dist/daemon.js +155 -111
  53. package/dist/db-D4FVCA5I.js +9 -0
  54. package/dist/{db-FSYOTHSN.js → db-IJL6B26S.js} +1 -1
  55. package/dist/{delete-TXVOH2OC.js → delete-NLXES2C7.js} +3 -3
  56. package/dist/delivery-manager-EB52CQ5X.js +33 -0
  57. package/dist/{delivery-router-T6CYTS3M.js → delivery-router-Y66OXJPM.js} +4 -4
  58. package/dist/down-JVHNXOFU.js +17 -0
  59. package/dist/echo-text-QVPS6QDM.js +32 -0
  60. package/dist/{env-77IOWG4U.js → env-IQ6Q2333.js} +1 -1
  61. package/dist/exec-R2WWZ6FH.js +17 -0
  62. package/dist/{export-TZKOCSCE.js → export-ZZ5WWBUH.js} +6 -6
  63. package/dist/{extension-35NB6GHW.js → extension-LZYHBNLV.js} +1 -1
  64. package/dist/{extensions-LQX2N7TI.js → extensions-AGANCIQA.js} +19 -18
  65. package/dist/{files-WNNVJWJB.js → files-Q2Z4LQZP.js} +4 -4
  66. package/dist/{import-BNNFCQ7U.js → import-MFYCBS4K.js} +11 -11
  67. package/dist/{isolation-4Q4P7HRV.js → isolation-7F3MA4G7.js} +4 -4
  68. package/dist/{join-E2EJEXZO.js → join-6SZCA5FX.js} +3 -3
  69. package/dist/{list-BYCEDASJ.js → list-KHJZJPEJ.js} +1 -1
  70. package/dist/{login-JNSIYFVH.js → login-GYTH67ES.js} +1 -1
  71. package/dist/{login-Y6UAYQVO.js → login-WY3DADVB.js} +3 -3
  72. package/dist/{logout-VHGWVH63.js → logout-TFZHWNVL.js} +3 -3
  73. package/dist/{logout-M6FI62BL.js → logout-YHQLOFLR.js} +1 -1
  74. package/dist/message-delivery-X4CZE2L6.js +41 -0
  75. package/dist/{mind-ELPD6VBP.js → mind-XIKEPJNS.js} +19 -19
  76. package/dist/{mind-activity-tracker-XFRVGXFS.js → mind-activity-tracker-RSIWUUJK.js} +5 -5
  77. package/dist/{mind-history-W4JPTPTV.js → mind-history-WHCNZ6I5.js} +1 -1
  78. package/dist/{mind-list-QROHCLGT.js → mind-list-H3HC2ZRG.js} +1 -1
  79. package/dist/mind-manager-VU3RGCXD.js +31 -0
  80. package/dist/{mind-profile-3LNKXNPA.js → mind-profile-7VYRJGFZ.js} +2 -2
  81. package/dist/mind-service-L7LMMDYJ.js +37 -0
  82. package/dist/{mind-sleep-PVCMLTAH.js → mind-sleep-ZL5ZXFTM.js} +1 -1
  83. package/dist/{mind-status-RAJFLRCN.js → mind-status-ZWULKOUO.js} +1 -1
  84. package/dist/{mind-wake-HZUOVE7J.js → mind-wake-HK5ORGUK.js} +1 -1
  85. package/dist/{package-GO3PHHUF.js → package-2X7UNSTQ.js} +6 -5
  86. package/dist/{read-OOINVR2H.js → read-CP7MYMJQ.js} +1 -1
  87. package/dist/{read-stdin-P6HCZUAA.js → read-stdin-4B5UYPPM.js} +1 -1
  88. package/dist/{register-ISOH34RF.js → register-XOBFEMI4.js} +1 -1
  89. package/dist/{registry-GV35XFT7.js → registry-RAXNFN7K.js} +5 -3
  90. package/dist/{reject-ZBWP62X5.js → reject-43AGXB6B.js} +1 -1
  91. package/dist/{restart-QBJV5455.js → restart-O5QIYQJT.js} +1 -1
  92. package/dist/{sandbox-5R32QKWQ.js → sandbox-O3GZTS7J.js} +5 -5
  93. package/dist/scheduler-SXELVRWO.js +31 -0
  94. package/dist/{schema-LYQUDL7G.js → schema-HHYJDG7B.js} +2 -2
  95. package/dist/{seed-MO2C7CWC.js → seed-I4CNKTKZ.js} +2 -2
  96. package/dist/{seed-check-3WXXRHTC.js → seed-check-HZPVFJKZ.js} +2 -2
  97. package/dist/{seed-cmd-ETIF4WD6.js → seed-cmd-YTQYWCZF.js} +4 -4
  98. package/dist/{seed-create-BPQC2IOR.js → seed-create-MDBTVADS.js} +7 -7
  99. package/dist/{seed-sprout-TX72K33T.js → seed-sprout-N6O5FBPY.js} +11 -11
  100. package/dist/{send-WO3CVG73.js → send-5XA7LRNB.js} +4 -4
  101. package/dist/{service-WMV6R6VJ.js → service-AY5TGWJX.js} +6 -6
  102. package/dist/service-install-NLGAVTQS.js +17 -0
  103. package/dist/{setup-OTEC3ZPM.js → setup-3434PQ5Q.js} +4 -4
  104. package/dist/{setup-ZTW4FVMQ.js → setup-47NBOCZL.js} +9 -9
  105. package/dist/{skill-QHACP7EU.js → skill-ICN6Y2ZF.js} +1 -1
  106. package/dist/{skills-JEWMHIIE.js → skills-YTLBAF32.js} +7 -7
  107. package/dist/sleep-manager-T3AXQB3R.js +35 -0
  108. package/dist/spirit-KTBHLULO.js +24 -0
  109. package/dist/{split-7AO4IO42.js → split-5YBEQTBF.js} +3 -3
  110. package/dist/{sprout-NFJZKYEW.js → sprout-4ZUJUNDQ.js} +2 -2
  111. package/dist/src-4LFGGNW7.js +2201 -0
  112. package/dist/{src-XNUXP2FP.js → src-O4PRLMKM.js} +1 -1
  113. package/dist/{src-2IMB3V27.js → src-OYWRPLC6.js} +1 -1
  114. package/dist/{start-2U57BBK7.js → start-LMXXRR3X.js} +1 -1
  115. package/dist/{status-BRYYYO7C.js → status-VMOZUIZ2.js} +7 -7
  116. package/dist/{stop-QILBDUAR.js → stop-TWDKVEUX.js} +1 -1
  117. package/dist/system-chat-HCPHUQGI.js +35 -0
  118. package/dist/{systems-3XTAHA35.js → systems-Y2WZV2K4.js} +4 -4
  119. package/dist/{tailscale-X4HRKRTW.js → tailscale-PK3AI5EV.js} +3 -3
  120. package/dist/template-hash-JARTCRGS.js +9 -0
  121. package/dist/turn-tracker-SZBSL7LK.js +35 -0
  122. package/dist/up-VGVPOB6J.js +19 -0
  123. package/dist/{update-OY2JYXYK.js → update-3ANTQO54.js} +7 -7
  124. package/dist/{update-check-IUB7QHAF.js → update-check-4O6DKUOF.js} +4 -4
  125. package/dist/{upgrade-25J6AE47.js → upgrade-RXFZR5FI.js} +3 -3
  126. package/dist/{variant-5LQOPCQA.js → variant-HHDTW74J.js} +1 -1
  127. package/dist/{version-notify-N37N2C4G.js → version-notify-SSNAWZMX.js} +21 -20
  128. package/dist/{volute-config-7FO6QKWU.js → volute-config-TS62GS6A.js} +1 -1
  129. package/package.json +5 -4
  130. package/templates/claude/package.json.tmpl +1 -1
  131. package/templates/codex/package.json.tmpl +1 -1
  132. package/templates/pi/package.json.tmpl +2 -1
  133. package/templates/pi/src/agent.ts +1 -1
  134. package/templates/pi/src/lib/content.ts +1 -1
  135. package/templates/pi/src/lib/event-handler.ts +1 -1
  136. package/templates/pi/src/lib/reply-instructions-extension.ts +1 -1
  137. package/templates/pi/src/lib/resolve-model.ts +4 -4
  138. package/templates/pi/src/lib/subagents.ts +2 -2
  139. package/dist/chunk-LMMQX4CK.js +0 -49
  140. package/dist/db-ZEPKEJJD.js +0 -9
  141. package/dist/delivery-manager-VNHLQTTO.js +0 -30
  142. package/dist/down-6DYO2QV7.js +0 -17
  143. package/dist/echo-text-QFCH3H6G.js +0 -31
  144. package/dist/exec-5DGKQ5V3.js +0 -17
  145. package/dist/message-delivery-7BCYJLH2.js +0 -40
  146. package/dist/mind-manager-EDCLALBF.js +0 -30
  147. package/dist/mind-service-WTOFVNLW.js +0 -36
  148. package/dist/scheduler-GQBDCGLU.js +0 -30
  149. package/dist/service-install-W3FQXJKB.js +0 -17
  150. package/dist/sleep-manager-5277OBHI.js +0 -34
  151. package/dist/spirit-NVXWSVKM.js +0 -24
  152. package/dist/src-OS75U2O7.js +0 -241910
  153. package/dist/system-chat-LQSJVY55.js +0 -34
  154. package/dist/template-hash-DMHSLRDX.js +0 -9
  155. package/dist/up-4H7TL6WB.js +0 -19
@@ -2,15 +2,37 @@
2
2
  import {
3
3
  readGlobalConfig,
4
4
  writeGlobalConfig
5
- } from "./chunk-DNU6XLE2.js";
5
+ } from "./chunk-N64Q7FMP.js";
6
6
  import {
7
7
  logger_default
8
8
  } from "./chunk-T2TP6ZC6.js";
9
9
 
10
10
  // packages/daemon/src/lib/ai-service.ts
11
- import { complete, getEnvApiKey, getModel, getModels, getProviders } from "@mariozechner/pi-ai";
12
- import { getOAuthApiKey } from "@mariozechner/pi-ai/oauth";
11
+ import { defaultProviderAuthContext } from "@earendil-works/pi-ai";
12
+ import { getOAuthApiKey } from "@earendil-works/pi-ai/oauth";
13
+ import {
14
+ builtinModels,
15
+ getBuiltinModel,
16
+ getBuiltinModels,
17
+ getBuiltinProviders
18
+ } from "@earendil-works/pi-ai/providers/all";
13
19
  var aiLog = logger_default.child("ai-service");
20
+ var models = builtinModels();
21
+ var authContext = defaultProviderAuthContext();
22
+ async function resolveProviderKey(providerId, configKey) {
23
+ const provider = models.getProvider(providerId);
24
+ const model = getBuiltinModels(providerId)[0];
25
+ if (provider?.auth.apiKey && model) {
26
+ try {
27
+ const credential = configKey ? { type: "api_key", key: configKey } : void 0;
28
+ const res = await provider.auth.apiKey.resolve({ model, ctx: authContext, credential });
29
+ if (res?.auth.apiKey) return res.auth.apiKey;
30
+ } catch (err) {
31
+ aiLog.debug(`api key resolution failed for ${providerId}`, logger_default.errorData(err));
32
+ }
33
+ }
34
+ return configKey;
35
+ }
14
36
  var providerRefreshHook;
15
37
  function setProviderRefreshHook(hook) {
16
38
  providerRefreshHook = hook;
@@ -49,7 +71,7 @@ function removeAiConfig() {
49
71
  delete config.ai;
50
72
  writeGlobalConfig(config);
51
73
  }
52
- function getConfiguredProviders() {
74
+ async function getConfiguredProviders() {
53
75
  const ai = getAiConfig();
54
76
  const configured = /* @__PURE__ */ new Set();
55
77
  if (ai) {
@@ -58,8 +80,8 @@ function getConfiguredProviders() {
58
80
  if (p.apiKey || p.oauth) configured.add(id);
59
81
  }
60
82
  }
61
- for (const id of getProviders()) {
62
- if (!configured.has(id) && getEnvApiKey(id)) {
83
+ for (const id of getBuiltinProviders()) {
84
+ if (!configured.has(id) && await resolveProviderKey(id)) {
63
85
  configured.add(id);
64
86
  }
65
87
  }
@@ -87,14 +109,14 @@ function templateForProvider(provider) {
87
109
  if (provider === "openai-codex") return "codex";
88
110
  return "pi";
89
111
  }
90
- function resolveTemplate(modelId) {
112
+ async function resolveTemplate(modelId) {
91
113
  if (!modelId) {
92
114
  const enabled = getEnabledModels();
93
115
  if (enabled.length > 0) {
94
116
  const model2 = findModel(enabled[0]);
95
117
  if (model2) return templateForProvider(model2.provider);
96
118
  }
97
- const providers = getConfiguredProviders();
119
+ const providers = await getConfiguredProviders();
98
120
  if (providers.length === 1) return templateForProvider(providers[0]);
99
121
  if (providers.length > 0 && !providers.includes("anthropic")) {
100
122
  return templateForProvider(providers[0]);
@@ -119,17 +141,13 @@ function setEnabledModels(modelIds) {
119
141
  const config = readGlobalConfig();
120
142
  writeGlobalConfig({ ...config, ai });
121
143
  }
122
- function getAvailableModels() {
123
- const providers = getConfiguredProviders();
124
- const models = [];
144
+ async function getAvailableModels() {
145
+ const providers = await getConfiguredProviders();
146
+ const result = [];
125
147
  for (const provider of providers) {
126
- try {
127
- models.push(...getModels(provider));
128
- } catch (err) {
129
- aiLog.warn(`failed to load models for provider ${provider}`, logger_default.errorData(err));
130
- }
148
+ result.push(...getBuiltinModels(provider));
131
149
  }
132
- return models;
150
+ return result;
133
151
  }
134
152
  async function resolveApiKey(providerId) {
135
153
  const ai = getAiConfig();
@@ -150,8 +168,7 @@ async function resolveApiKey(providerId) {
150
168
  aiLog.warn(`OAuth key resolution failed for ${providerId}`, logger_default.errorData(err));
151
169
  }
152
170
  }
153
- if (providerConfig?.apiKey) return providerConfig.apiKey;
154
- return getEnvApiKey(providerId) ?? void 0;
171
+ return resolveProviderKey(providerId, providerConfig?.apiKey);
155
172
  }
156
173
  function qualifyModelId(modelId) {
157
174
  if (modelId.includes(":")) return modelId;
@@ -164,22 +181,13 @@ function unqualifyModelId(modelId) {
164
181
  return idx >= 0 ? modelId.slice(idx + 1) : modelId;
165
182
  }
166
183
  function findModel(modelId) {
167
- const providers = getConfiguredProviders();
168
- for (const provider of providers) {
169
- try {
170
- const model = getModel(provider, modelId);
171
- if (model) return model;
172
- } catch (err) {
173
- aiLog.debug(`model lookup failed for ${modelId} in ${provider}`, logger_default.errorData(err));
174
- }
184
+ for (const provider of getBuiltinProviders()) {
185
+ const model = getBuiltinModel(provider, modelId);
186
+ if (model) return model;
175
187
  }
176
- for (const provider of providers) {
177
- try {
178
- const found = getModels(provider).find((m) => m.id.startsWith(modelId));
179
- if (found) return found;
180
- } catch (err) {
181
- aiLog.debug(`prefix search failed for ${modelId} in ${provider}`, logger_default.errorData(err));
182
- }
188
+ for (const provider of getBuiltinProviders()) {
189
+ const found = getBuiltinModels(provider).find((m) => m.id.startsWith(modelId));
190
+ if (found) return found;
183
191
  }
184
192
  return void 0;
185
193
  }
@@ -201,7 +209,7 @@ async function aiComplete(systemPrompt, userMessage, modelId) {
201
209
  }
202
210
  try {
203
211
  const apiKey = await resolveApiKey(model.provider);
204
- const response = await complete(
212
+ const response = await models.complete(
205
213
  model,
206
214
  {
207
215
  systemPrompt,