@ai-ecoverse/slicc-agent 6.6.0 → 6.7.1

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/preferred.js CHANGED
@@ -1,6 +1,43 @@
1
1
  const BEDROCK = "amazon-bedrock";
2
2
  const PREFERRED_MODELS = {
3
- [BEDROCK]: "us.anthropic.claude-sonnet-5-5"
3
+ [BEDROCK]: "us.anthropic.claude-sonnet-5-5",
4
+ "ant-ling": "Ring-2.6-1T",
5
+ anthropic: "claude-opus-4-8",
6
+ openai: "gpt-5.5",
7
+ azure: "gpt-5.4",
8
+ nvidia: "nvidia/nemotron-3-ultra-550b-a55b",
9
+ deepseek: "deepseek-v4-pro",
10
+ google: "gemini-3.1-pro-preview",
11
+ "google-vertex": "gemini-3.1-pro-preview",
12
+ openrouter: "moonshotai/kimi-k2.6",
13
+ "vercel-ai-gateway": "zai/glm-5.1",
14
+ xai: "grok-4.7",
15
+ groq: "openai/gpt-oss-120b",
16
+ cerebras: "gpt-oss-120b",
17
+ zai: "glm-5.3",
18
+ "zai-coding-cn": "glm-5.3",
19
+ mistral: "devstral-medium-latest",
20
+ minimax: "MiniMax-M2.7",
21
+ "minimax-cn": "MiniMax-M2.7",
22
+ moonshotai: "kimi-k2.6",
23
+ "moonshotai-cn": "kimi-k2.6",
24
+ huggingface: "moonshotai/Kimi-K2.6",
25
+ fireworks: "accounts/fireworks/models/kimi-k3",
26
+ together: "moonshotai/Kimi-K3",
27
+ baseten: "zai-org/GLM-5.2",
28
+ opencode: "kimi-k2.6",
29
+ "opencode-go": "kimi-k3",
30
+ "kimi-coding": "kimi-for-coding",
31
+ meta: "muse-spark-1.3",
32
+ "cloudflare-workers-ai": "@cf/moonshotai/kimi-k2.6",
33
+ "cloudflare-ai-gateway": "workers-ai/@cf/moonshotai/kimi-k2.6",
34
+ "qwen-token-plan": "qwen3.7-max",
35
+ "qwen-token-plan-cn": "qwen3.7-max",
36
+ "qwen-token-plan-individual": "qwen3.8-max",
37
+ xiaomi: "mimo-v2.5-pro",
38
+ "xiaomi-token-plan-cn": "mimo-v2.5-pro",
39
+ "xiaomi-token-plan-ams": "mimo-v2.5-pro",
40
+ "xiaomi-token-plan-sgp": "mimo-v2.5-pro"
4
41
  };
5
42
  function preferredModel(providerId, available) {
6
43
  const preferredId = PREFERRED_MODELS[providerId];
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/preferred.ts"],
4
- "sourcesContent": ["export const BEDROCK = 'amazon-bedrock';\n\nexport const PREFERRED_MODELS: Readonly<Record<string, string>> = {\n [BEDROCK]: 'us.anthropic.claude-sonnet-5-5',\n};\n\nexport function preferredModel<T extends { id: string }>(\n providerId: string,\n available: readonly T[]\n): T | undefined {\n const preferredId = PREFERRED_MODELS[providerId];\n return available.find((model) => model.id === preferredId) ?? available[0];\n}\n"],
5
- "mappings": "AAAO,MAAM,UAAU;AAEhB,MAAM,mBAAqD;AAAA,EAChE,CAAC,OAAO,GAAG;AACb;AAEO,SAAS,eACd,YACA,WACe;AACf,QAAM,cAAc,iBAAiB,UAAU;AAC/C,SAAO,UAAU,KAAK,CAAC,UAAU,MAAM,OAAO,WAAW,KAAK,UAAU,CAAC;AAC3E;",
4
+ "sourcesContent": ["export const BEDROCK = 'amazon-bedrock';\n\nexport const PREFERRED_MODELS: Readonly<Record<string, string>> = {\n [BEDROCK]: 'us.anthropic.claude-sonnet-5-5',\n 'ant-ling': 'Ring-2.6-1T',\n anthropic: 'claude-opus-4-8',\n openai: 'gpt-5.5',\n azure: 'gpt-5.4',\n nvidia: 'nvidia/nemotron-3-ultra-550b-a55b',\n deepseek: 'deepseek-v4-pro',\n google: 'gemini-3.1-pro-preview',\n 'google-vertex': 'gemini-3.1-pro-preview',\n openrouter: 'moonshotai/kimi-k2.6',\n 'vercel-ai-gateway': 'zai/glm-5.1',\n xai: 'grok-4.7',\n groq: 'openai/gpt-oss-120b',\n cerebras: 'gpt-oss-120b',\n zai: 'glm-5.3',\n 'zai-coding-cn': 'glm-5.3',\n mistral: 'devstral-medium-latest',\n minimax: 'MiniMax-M2.7',\n 'minimax-cn': 'MiniMax-M2.7',\n moonshotai: 'kimi-k2.6',\n 'moonshotai-cn': 'kimi-k2.6',\n huggingface: 'moonshotai/Kimi-K2.6',\n fireworks: 'accounts/fireworks/models/kimi-k3',\n together: 'moonshotai/Kimi-K3',\n baseten: 'zai-org/GLM-5.2',\n opencode: 'kimi-k2.6',\n 'opencode-go': 'kimi-k3',\n 'kimi-coding': 'kimi-for-coding',\n meta: 'muse-spark-1.3',\n 'cloudflare-workers-ai': '@cf/moonshotai/kimi-k2.6',\n 'cloudflare-ai-gateway': 'workers-ai/@cf/moonshotai/kimi-k2.6',\n 'qwen-token-plan': 'qwen3.7-max',\n 'qwen-token-plan-cn': 'qwen3.7-max',\n 'qwen-token-plan-individual': 'qwen3.8-max',\n xiaomi: 'mimo-v2.5-pro',\n 'xiaomi-token-plan-cn': 'mimo-v2.5-pro',\n 'xiaomi-token-plan-ams': 'mimo-v2.5-pro',\n 'xiaomi-token-plan-sgp': 'mimo-v2.5-pro',\n};\n\nexport function preferredModel<T extends { id: string }>(\n providerId: string,\n available: readonly T[]\n): T | undefined {\n const preferredId = PREFERRED_MODELS[providerId];\n return available.find((model) => model.id === preferredId) ?? available[0];\n}\n"],
5
+ "mappings": "AAAO,MAAM,UAAU;AAEhB,MAAM,mBAAqD;AAAA,EAChE,CAAC,OAAO,GAAG;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AAAA,EACV,KAAK;AAAA,EACL,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,eAAe;AAAA,EACf,eAAe;AAAA,EACf,MAAM;AAAA,EACN,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,8BAA8B;AAAA,EAC9B,QAAQ;AAAA,EACR,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,yBAAyB;AAC3B;AAEO,SAAS,eACd,YACA,WACe;AACf,QAAM,cAAc,iBAAiB,UAAU;AAC/C,SAAO,UAAU,KAAK,CAAC,UAAU,MAAM,OAAO,WAAW,KAAK,UAAU,CAAC;AAC3E;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,343 @@
1
+ import { antLingProvider } from "@earendil-works/pi-ai/providers/ant-ling";
2
+ import { anthropicProvider } from "@earendil-works/pi-ai/providers/anthropic";
3
+ import { basetenProvider } from "@earendil-works/pi-ai/providers/baseten";
4
+ import { cerebrasProvider } from "@earendil-works/pi-ai/providers/cerebras";
5
+ import { deepseekProvider } from "@earendil-works/pi-ai/providers/deepseek";
6
+ import { fireworksProvider } from "@earendil-works/pi-ai/providers/fireworks";
7
+ import { groqProvider } from "@earendil-works/pi-ai/providers/groq";
8
+ import { huggingfaceProvider } from "@earendil-works/pi-ai/providers/huggingface";
9
+ import { kimiCodingProvider } from "@earendil-works/pi-ai/providers/kimi-coding";
10
+ import { metaProvider } from "@earendil-works/pi-ai/providers/meta";
11
+ import { minimaxProvider } from "@earendil-works/pi-ai/providers/minimax";
12
+ import { minimaxCnProvider } from "@earendil-works/pi-ai/providers/minimax-cn";
13
+ import { mistralProvider } from "@earendil-works/pi-ai/providers/mistral";
14
+ import { moonshotaiProvider } from "@earendil-works/pi-ai/providers/moonshotai";
15
+ import { moonshotaiCnProvider } from "@earendil-works/pi-ai/providers/moonshotai-cn";
16
+ import { nvidiaProvider } from "@earendil-works/pi-ai/providers/nvidia";
17
+ import { openaiProvider } from "@earendil-works/pi-ai/providers/openai";
18
+ import { opencodeProvider } from "@earendil-works/pi-ai/providers/opencode";
19
+ import { opencodeGoProvider } from "@earendil-works/pi-ai/providers/opencode-go";
20
+ import { openrouterProvider } from "@earendil-works/pi-ai/providers/openrouter";
21
+ import { qwenTokenPlanProvider } from "@earendil-works/pi-ai/providers/qwen-token-plan";
22
+ import { qwenTokenPlanCnProvider } from "@earendil-works/pi-ai/providers/qwen-token-plan-cn";
23
+ import { qwenTokenPlanIndividualProvider } from "@earendil-works/pi-ai/providers/qwen-token-plan-individual";
24
+ import { togetherProvider } from "@earendil-works/pi-ai/providers/together";
25
+ import { vercelAIGatewayProvider } from "@earendil-works/pi-ai/providers/vercel-ai-gateway";
26
+ import { xaiProvider } from "@earendil-works/pi-ai/providers/xai";
27
+ import { xiaomiProvider } from "@earendil-works/pi-ai/providers/xiaomi";
28
+ import { xiaomiTokenPlanAmsProvider } from "@earendil-works/pi-ai/providers/xiaomi-token-plan-ams";
29
+ import { xiaomiTokenPlanCnProvider } from "@earendil-works/pi-ai/providers/xiaomi-token-plan-cn";
30
+ import { xiaomiTokenPlanSgpProvider } from "@earendil-works/pi-ai/providers/xiaomi-token-plan-sgp";
31
+ import { zaiProvider } from "@earendil-works/pi-ai/providers/zai";
32
+ import { zaiCodingCnProvider } from "@earendil-works/pi-ai/providers/zai-coding-cn";
33
+ const KEY_PROVIDERS = [
34
+ {
35
+ id: "anthropic",
36
+ make: anthropicProvider,
37
+ env: "ANTHROPIC_API_KEY",
38
+ description: "Claude models, with an API key from the Claude Console.",
39
+ keyUrl: "https://console.anthropic.com/settings/keys",
40
+ cors: true
41
+ },
42
+ {
43
+ id: "openai",
44
+ make: openaiProvider,
45
+ env: "OPENAI_API_KEY",
46
+ description: "GPT models, with an API key from the OpenAI platform.",
47
+ keyUrl: "https://platform.openai.com/api-keys",
48
+ cors: true
49
+ },
50
+ {
51
+ id: "mistral",
52
+ make: mistralProvider,
53
+ env: "MISTRAL_API_KEY",
54
+ description: "Mistral and Devstral models from La Plateforme.",
55
+ keyUrl: "https://console.mistral.ai/api-keys",
56
+ cors: true
57
+ },
58
+ {
59
+ id: "groq",
60
+ make: groqProvider,
61
+ env: "GROQ_API_KEY",
62
+ description: "Open models on Groq\u2019s fast inference.",
63
+ keyUrl: "https://console.groq.com/keys",
64
+ cors: true
65
+ },
66
+ {
67
+ id: "deepseek",
68
+ make: deepseekProvider,
69
+ env: "DEEPSEEK_API_KEY",
70
+ description: "DeepSeek\u2019s own models.",
71
+ keyUrl: "https://platform.deepseek.com/api_keys",
72
+ cors: true
73
+ },
74
+ {
75
+ id: "together",
76
+ make: togetherProvider,
77
+ env: "TOGETHER_API_KEY",
78
+ description: "Open models hosted by Together AI.",
79
+ keyUrl: "https://api.together.ai/settings/api-keys",
80
+ cors: true
81
+ },
82
+ {
83
+ id: "huggingface",
84
+ make: huggingfaceProvider,
85
+ env: "HF_TOKEN",
86
+ description: "Open models through Hugging Face\u2019s inference router.",
87
+ keyUrl: "https://huggingface.co/settings/tokens",
88
+ cors: true
89
+ },
90
+ {
91
+ id: "xiaomi",
92
+ make: xiaomiProvider,
93
+ env: "XIAOMI_API_KEY",
94
+ description: "Xiaomi\u2019s MiMo models.",
95
+ keyUrl: "https://platform.xiaomimimo.com/#/console/api-keys",
96
+ cors: true
97
+ },
98
+ {
99
+ id: "xiaomi-token-plan-ams",
100
+ make: xiaomiTokenPlanAmsProvider,
101
+ env: "XIAOMI_TOKEN_PLAN_AMS_API_KEY",
102
+ description: "MiMo models on a Xiaomi token plan, served from Amsterdam.",
103
+ keyUrl: "https://platform.xiaomimimo.com/#/console/api-keys",
104
+ cors: true
105
+ },
106
+ {
107
+ id: "xiaomi-token-plan-cn",
108
+ make: xiaomiTokenPlanCnProvider,
109
+ env: "XIAOMI_TOKEN_PLAN_CN_API_KEY",
110
+ description: "MiMo models on a Xiaomi token plan, served from China.",
111
+ keyUrl: "https://platform.xiaomimimo.com/#/console/api-keys",
112
+ cors: true
113
+ },
114
+ {
115
+ id: "xiaomi-token-plan-sgp",
116
+ make: xiaomiTokenPlanSgpProvider,
117
+ env: "XIAOMI_TOKEN_PLAN_SGP_API_KEY",
118
+ description: "MiMo models on a Xiaomi token plan, served from Singapore.",
119
+ keyUrl: "https://platform.xiaomimimo.com/#/console/api-keys",
120
+ cors: true
121
+ },
122
+ {
123
+ id: "cerebras",
124
+ make: cerebrasProvider,
125
+ env: "CEREBRAS_API_KEY",
126
+ description: "Open models on Cerebras inference.",
127
+ keyUrl: "https://cloud.cerebras.ai",
128
+ cors: false
129
+ },
130
+ {
131
+ id: "openrouter",
132
+ make: openrouterProvider,
133
+ env: "OPENROUTER_API_KEY",
134
+ description: "Hundreds of models from many labs through one key.",
135
+ keyUrl: "https://openrouter.ai/settings/keys",
136
+ cors: false
137
+ },
138
+ {
139
+ id: "fireworks",
140
+ make: fireworksProvider,
141
+ env: "FIREWORKS_API_KEY",
142
+ description: "Open models hosted by Fireworks AI.",
143
+ keyUrl: "https://app.fireworks.ai/settings/users/api-keys",
144
+ cors: false
145
+ },
146
+ {
147
+ id: "baseten",
148
+ make: basetenProvider,
149
+ env: "BASETEN_API_KEY",
150
+ description: "Open models hosted by Baseten.",
151
+ keyUrl: "https://app.baseten.co/settings/api_keys",
152
+ cors: false
153
+ },
154
+ {
155
+ id: "moonshotai",
156
+ make: moonshotaiProvider,
157
+ env: "MOONSHOT_API_KEY",
158
+ description: "Kimi models from Moonshot AI.",
159
+ keyUrl: "https://platform.moonshot.ai/console/api-keys",
160
+ cors: false
161
+ },
162
+ {
163
+ id: "moonshotai-cn",
164
+ make: moonshotaiCnProvider,
165
+ env: "MOONSHOT_API_KEY",
166
+ description: "Kimi models from Moonshot AI\u2019s China platform.",
167
+ keyUrl: "https://platform.moonshot.cn/console/api-keys",
168
+ cors: false
169
+ },
170
+ {
171
+ id: "xai",
172
+ make: xaiProvider,
173
+ env: "XAI_API_KEY",
174
+ description: "Grok models from xAI.",
175
+ keyUrl: "https://console.x.ai",
176
+ cors: false
177
+ },
178
+ {
179
+ id: "meta",
180
+ make: metaProvider,
181
+ env: "META_API_KEY",
182
+ description: "Meta\u2019s Muse models.",
183
+ keyUrl: "https://developer.meta.ai",
184
+ cors: false
185
+ },
186
+ {
187
+ id: "vercel-ai-gateway",
188
+ make: vercelAIGatewayProvider,
189
+ env: "AI_GATEWAY_API_KEY",
190
+ description: "Models from many labs through Vercel\u2019s AI Gateway.",
191
+ keyUrl: "https://vercel.com/docs/ai-gateway/authentication",
192
+ cors: false
193
+ },
194
+ {
195
+ id: "minimax",
196
+ make: minimaxProvider,
197
+ env: "MINIMAX_API_KEY",
198
+ description: "MiniMax\u2019s models.",
199
+ keyUrl: "https://platform.minimax.io/user-center/basic-information/interface-key",
200
+ cors: false
201
+ },
202
+ {
203
+ id: "minimax-cn",
204
+ make: minimaxCnProvider,
205
+ env: "MINIMAX_CN_API_KEY",
206
+ description: "MiniMax\u2019s models from its China platform.",
207
+ keyUrl: "https://platform.minimaxi.com/user-center/basic-information/interface-key",
208
+ cors: false
209
+ },
210
+ {
211
+ id: "zai",
212
+ make: zaiProvider,
213
+ env: "ZAI_API_KEY",
214
+ description: "GLM models on Z.AI\u2019s coding plan.",
215
+ keyUrl: "https://z.ai/manage-apikey/apikey-list",
216
+ cors: false
217
+ },
218
+ {
219
+ id: "zai-coding-cn",
220
+ make: zaiCodingCnProvider,
221
+ env: "ZAI_CODING_CN_API_KEY",
222
+ description: "GLM models on Zhipu\u2019s coding plan in China.",
223
+ keyUrl: "https://open.bigmodel.cn/usercenter/apikeys",
224
+ cors: false
225
+ },
226
+ {
227
+ id: "nvidia",
228
+ make: nvidiaProvider,
229
+ env: "NVIDIA_API_KEY",
230
+ description: "Open models on NVIDIA\u2019s API catalog.",
231
+ keyUrl: "https://build.nvidia.com/settings/api-keys",
232
+ cors: false
233
+ },
234
+ {
235
+ id: "kimi-coding",
236
+ make: kimiCodingProvider,
237
+ env: "KIMI_API_KEY",
238
+ description: "Kimi models on the Kimi Code subscription.",
239
+ keyUrl: "https://www.kimi.com/code/console",
240
+ cors: false
241
+ },
242
+ {
243
+ id: "ant-ling",
244
+ make: antLingProvider,
245
+ env: "ANT_LING_API_KEY",
246
+ description: "Ling and Ring models from Ant Group.",
247
+ keyUrl: "https://www.ant-ling.com",
248
+ cors: false
249
+ },
250
+ {
251
+ id: "opencode",
252
+ make: opencodeProvider,
253
+ env: "OPENCODE_API_KEY",
254
+ description: "Models curated for coding agents by OpenCode Zen.",
255
+ keyUrl: "https://opencode.ai/auth",
256
+ cors: false
257
+ },
258
+ {
259
+ id: "opencode-go",
260
+ make: opencodeGoProvider,
261
+ env: "OPENCODE_API_KEY",
262
+ description: "Open models on the OpenCode Go subscription.",
263
+ keyUrl: "https://opencode.ai/auth",
264
+ cors: false
265
+ },
266
+ {
267
+ id: "qwen-token-plan",
268
+ make: qwenTokenPlanProvider,
269
+ env: "QWEN_TOKEN_PLAN_API_KEY",
270
+ description: "Qwen models on an Alibaba Cloud token plan.",
271
+ keyUrl: "https://modelstudio.console.alibabacloud.com",
272
+ cors: false
273
+ },
274
+ {
275
+ id: "qwen-token-plan-cn",
276
+ make: qwenTokenPlanCnProvider,
277
+ env: "QWEN_TOKEN_PLAN_CN_API_KEY",
278
+ description: "Qwen models on an Alibaba Cloud token plan in China.",
279
+ keyUrl: "https://bailian.console.aliyun.com",
280
+ cors: false
281
+ },
282
+ {
283
+ id: "qwen-token-plan-individual",
284
+ make: qwenTokenPlanIndividualProvider,
285
+ env: "QWEN_TOKEN_PLAN_API_KEY",
286
+ description: "Qwen models on an individual Alibaba Cloud token plan.",
287
+ keyUrl: "https://modelstudio.console.alibabacloud.com",
288
+ cors: false
289
+ }
290
+ ];
291
+ const upper = (text) => text.toUpperCase().replace(/[^A-Z0-9]/g, "_");
292
+ function vaultNames(entries) {
293
+ const uses = Map.groupBy(entries, (entry) => entry.env);
294
+ return new Map(
295
+ entries.map((entry) => [
296
+ entry.id,
297
+ uses.get(entry.env).length > 1 ? `${upper(entry.id)}_API_KEY` : entry.env
298
+ ])
299
+ );
300
+ }
301
+ const named = vaultNames(KEY_PROVIDERS);
302
+ const LISTINGS = new Map([
303
+ [
304
+ "amazon-bedrock",
305
+ {
306
+ description: "Claude and other models on AWS, with a Bedrock API key.",
307
+ keyUrl: "https://console.aws.amazon.com/bedrock/home#/api-keys",
308
+ auth: "fields",
309
+ corsFree: true,
310
+ vaultName: "AWS_BEARER_TOKEN_BEDROCK"
311
+ }
312
+ ],
313
+ [
314
+ "adobe",
315
+ {
316
+ description: "Models through Adobe\u2019s LLM proxy, with your Adobe ID.",
317
+ auth: "oauth",
318
+ corsFree: true,
319
+ vaultName: "ADOBE_IMS_TOKEN"
320
+ }
321
+ ],
322
+ ...KEY_PROVIDERS.map((entry) => [
323
+ entry.id,
324
+ {
325
+ description: entry.description,
326
+ keyUrl: entry.keyUrl,
327
+ auth: "api-key",
328
+ corsFree: !entry.cors,
329
+ vaultName: named.get(entry.id)
330
+ }
331
+ ])
332
+ ]);
333
+ const ADDED_FIRST = ["amazon-bedrock", "adobe"];
334
+ const VAULT_KNOWN = new Set(
335
+ [...LISTINGS.keys()].filter((id) => id !== "adobe")
336
+ );
337
+ export {
338
+ ADDED_FIRST,
339
+ KEY_PROVIDERS,
340
+ LISTINGS,
341
+ VAULT_KNOWN
342
+ };
343
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/providers.ts"],
4
+ "sourcesContent": ["import type { Provider } from '@earendil-works/pi-ai';\nimport { antLingProvider } from '@earendil-works/pi-ai/providers/ant-ling';\nimport { anthropicProvider } from '@earendil-works/pi-ai/providers/anthropic';\nimport { basetenProvider } from '@earendil-works/pi-ai/providers/baseten';\nimport { cerebrasProvider } from '@earendil-works/pi-ai/providers/cerebras';\nimport { deepseekProvider } from '@earendil-works/pi-ai/providers/deepseek';\nimport { fireworksProvider } from '@earendil-works/pi-ai/providers/fireworks';\nimport { groqProvider } from '@earendil-works/pi-ai/providers/groq';\nimport { huggingfaceProvider } from '@earendil-works/pi-ai/providers/huggingface';\nimport { kimiCodingProvider } from '@earendil-works/pi-ai/providers/kimi-coding';\nimport { metaProvider } from '@earendil-works/pi-ai/providers/meta';\nimport { minimaxProvider } from '@earendil-works/pi-ai/providers/minimax';\nimport { minimaxCnProvider } from '@earendil-works/pi-ai/providers/minimax-cn';\nimport { mistralProvider } from '@earendil-works/pi-ai/providers/mistral';\nimport { moonshotaiProvider } from '@earendil-works/pi-ai/providers/moonshotai';\nimport { moonshotaiCnProvider } from '@earendil-works/pi-ai/providers/moonshotai-cn';\nimport { nvidiaProvider } from '@earendil-works/pi-ai/providers/nvidia';\nimport { openaiProvider } from '@earendil-works/pi-ai/providers/openai';\nimport { opencodeProvider } from '@earendil-works/pi-ai/providers/opencode';\nimport { opencodeGoProvider } from '@earendil-works/pi-ai/providers/opencode-go';\nimport { openrouterProvider } from '@earendil-works/pi-ai/providers/openrouter';\nimport { qwenTokenPlanProvider } from '@earendil-works/pi-ai/providers/qwen-token-plan';\nimport { qwenTokenPlanCnProvider } from '@earendil-works/pi-ai/providers/qwen-token-plan-cn';\nimport { qwenTokenPlanIndividualProvider } from '@earendil-works/pi-ai/providers/qwen-token-plan-individual';\nimport { togetherProvider } from '@earendil-works/pi-ai/providers/together';\nimport { vercelAIGatewayProvider } from '@earendil-works/pi-ai/providers/vercel-ai-gateway';\nimport { xaiProvider } from '@earendil-works/pi-ai/providers/xai';\nimport { xiaomiProvider } from '@earendil-works/pi-ai/providers/xiaomi';\nimport { xiaomiTokenPlanAmsProvider } from '@earendil-works/pi-ai/providers/xiaomi-token-plan-ams';\nimport { xiaomiTokenPlanCnProvider } from '@earendil-works/pi-ai/providers/xiaomi-token-plan-cn';\nimport { xiaomiTokenPlanSgpProvider } from '@earendil-works/pi-ai/providers/xiaomi-token-plan-sgp';\nimport { zaiProvider } from '@earendil-works/pi-ai/providers/zai';\nimport { zaiCodingCnProvider } from '@earendil-works/pi-ai/providers/zai-coding-cn';\n\nexport interface KeyProvider {\n id: string;\n make: () => Provider;\n env: string;\n description: string;\n keyUrl: string;\n cors: boolean;\n}\n\nexport const KEY_PROVIDERS: readonly KeyProvider[] = [\n {\n id: 'anthropic',\n make: anthropicProvider,\n env: 'ANTHROPIC_API_KEY',\n description: 'Claude models, with an API key from the Claude Console.',\n keyUrl: 'https://console.anthropic.com/settings/keys',\n cors: true,\n },\n {\n id: 'openai',\n make: openaiProvider,\n env: 'OPENAI_API_KEY',\n description: 'GPT models, with an API key from the OpenAI platform.',\n keyUrl: 'https://platform.openai.com/api-keys',\n cors: true,\n },\n {\n id: 'mistral',\n make: mistralProvider,\n env: 'MISTRAL_API_KEY',\n description: 'Mistral and Devstral models from La Plateforme.',\n keyUrl: 'https://console.mistral.ai/api-keys',\n cors: true,\n },\n {\n id: 'groq',\n make: groqProvider,\n env: 'GROQ_API_KEY',\n description: 'Open models on Groq\u2019s fast inference.',\n keyUrl: 'https://console.groq.com/keys',\n cors: true,\n },\n {\n id: 'deepseek',\n make: deepseekProvider,\n env: 'DEEPSEEK_API_KEY',\n description: 'DeepSeek\u2019s own models.',\n keyUrl: 'https://platform.deepseek.com/api_keys',\n cors: true,\n },\n {\n id: 'together',\n make: togetherProvider,\n env: 'TOGETHER_API_KEY',\n description: 'Open models hosted by Together AI.',\n keyUrl: 'https://api.together.ai/settings/api-keys',\n cors: true,\n },\n {\n id: 'huggingface',\n make: huggingfaceProvider,\n env: 'HF_TOKEN',\n description: 'Open models through Hugging Face\u2019s inference router.',\n keyUrl: 'https://huggingface.co/settings/tokens',\n cors: true,\n },\n {\n id: 'xiaomi',\n make: xiaomiProvider,\n env: 'XIAOMI_API_KEY',\n description: 'Xiaomi\u2019s MiMo models.',\n keyUrl: 'https://platform.xiaomimimo.com/#/console/api-keys',\n cors: true,\n },\n {\n id: 'xiaomi-token-plan-ams',\n make: xiaomiTokenPlanAmsProvider,\n env: 'XIAOMI_TOKEN_PLAN_AMS_API_KEY',\n description: 'MiMo models on a Xiaomi token plan, served from Amsterdam.',\n keyUrl: 'https://platform.xiaomimimo.com/#/console/api-keys',\n cors: true,\n },\n {\n id: 'xiaomi-token-plan-cn',\n make: xiaomiTokenPlanCnProvider,\n env: 'XIAOMI_TOKEN_PLAN_CN_API_KEY',\n description: 'MiMo models on a Xiaomi token plan, served from China.',\n keyUrl: 'https://platform.xiaomimimo.com/#/console/api-keys',\n cors: true,\n },\n {\n id: 'xiaomi-token-plan-sgp',\n make: xiaomiTokenPlanSgpProvider,\n env: 'XIAOMI_TOKEN_PLAN_SGP_API_KEY',\n description: 'MiMo models on a Xiaomi token plan, served from Singapore.',\n keyUrl: 'https://platform.xiaomimimo.com/#/console/api-keys',\n cors: true,\n },\n {\n id: 'cerebras',\n make: cerebrasProvider,\n env: 'CEREBRAS_API_KEY',\n description: 'Open models on Cerebras inference.',\n keyUrl: 'https://cloud.cerebras.ai',\n cors: false,\n },\n {\n id: 'openrouter',\n make: openrouterProvider,\n env: 'OPENROUTER_API_KEY',\n description: 'Hundreds of models from many labs through one key.',\n keyUrl: 'https://openrouter.ai/settings/keys',\n cors: false,\n },\n {\n id: 'fireworks',\n make: fireworksProvider,\n env: 'FIREWORKS_API_KEY',\n description: 'Open models hosted by Fireworks AI.',\n keyUrl: 'https://app.fireworks.ai/settings/users/api-keys',\n cors: false,\n },\n {\n id: 'baseten',\n make: basetenProvider,\n env: 'BASETEN_API_KEY',\n description: 'Open models hosted by Baseten.',\n keyUrl: 'https://app.baseten.co/settings/api_keys',\n cors: false,\n },\n {\n id: 'moonshotai',\n make: moonshotaiProvider,\n env: 'MOONSHOT_API_KEY',\n description: 'Kimi models from Moonshot AI.',\n keyUrl: 'https://platform.moonshot.ai/console/api-keys',\n cors: false,\n },\n {\n id: 'moonshotai-cn',\n make: moonshotaiCnProvider,\n env: 'MOONSHOT_API_KEY',\n description: 'Kimi models from Moonshot AI\u2019s China platform.',\n keyUrl: 'https://platform.moonshot.cn/console/api-keys',\n cors: false,\n },\n {\n id: 'xai',\n make: xaiProvider,\n env: 'XAI_API_KEY',\n description: 'Grok models from xAI.',\n keyUrl: 'https://console.x.ai',\n cors: false,\n },\n {\n id: 'meta',\n make: metaProvider,\n env: 'META_API_KEY',\n description: 'Meta\u2019s Muse models.',\n keyUrl: 'https://developer.meta.ai',\n cors: false,\n },\n {\n id: 'vercel-ai-gateway',\n make: vercelAIGatewayProvider,\n env: 'AI_GATEWAY_API_KEY',\n description: 'Models from many labs through Vercel\u2019s AI Gateway.',\n keyUrl: 'https://vercel.com/docs/ai-gateway/authentication',\n cors: false,\n },\n {\n id: 'minimax',\n make: minimaxProvider,\n env: 'MINIMAX_API_KEY',\n description: 'MiniMax\u2019s models.',\n keyUrl: 'https://platform.minimax.io/user-center/basic-information/interface-key',\n cors: false,\n },\n {\n id: 'minimax-cn',\n make: minimaxCnProvider,\n env: 'MINIMAX_CN_API_KEY',\n description: 'MiniMax\u2019s models from its China platform.',\n keyUrl: 'https://platform.minimaxi.com/user-center/basic-information/interface-key',\n cors: false,\n },\n {\n id: 'zai',\n make: zaiProvider,\n env: 'ZAI_API_KEY',\n description: 'GLM models on Z.AI\u2019s coding plan.',\n keyUrl: 'https://z.ai/manage-apikey/apikey-list',\n cors: false,\n },\n {\n id: 'zai-coding-cn',\n make: zaiCodingCnProvider,\n env: 'ZAI_CODING_CN_API_KEY',\n description: 'GLM models on Zhipu\u2019s coding plan in China.',\n keyUrl: 'https://open.bigmodel.cn/usercenter/apikeys',\n cors: false,\n },\n {\n id: 'nvidia',\n make: nvidiaProvider,\n env: 'NVIDIA_API_KEY',\n description: 'Open models on NVIDIA\u2019s API catalog.',\n keyUrl: 'https://build.nvidia.com/settings/api-keys',\n cors: false,\n },\n {\n id: 'kimi-coding',\n make: kimiCodingProvider,\n env: 'KIMI_API_KEY',\n description: 'Kimi models on the Kimi Code subscription.',\n keyUrl: 'https://www.kimi.com/code/console',\n cors: false,\n },\n {\n id: 'ant-ling',\n make: antLingProvider,\n env: 'ANT_LING_API_KEY',\n description: 'Ling and Ring models from Ant Group.',\n keyUrl: 'https://www.ant-ling.com',\n cors: false,\n },\n {\n id: 'opencode',\n make: opencodeProvider,\n env: 'OPENCODE_API_KEY',\n description: 'Models curated for coding agents by OpenCode Zen.',\n keyUrl: 'https://opencode.ai/auth',\n cors: false,\n },\n {\n id: 'opencode-go',\n make: opencodeGoProvider,\n env: 'OPENCODE_API_KEY',\n description: 'Open models on the OpenCode Go subscription.',\n keyUrl: 'https://opencode.ai/auth',\n cors: false,\n },\n {\n id: 'qwen-token-plan',\n make: qwenTokenPlanProvider,\n env: 'QWEN_TOKEN_PLAN_API_KEY',\n description: 'Qwen models on an Alibaba Cloud token plan.',\n keyUrl: 'https://modelstudio.console.alibabacloud.com',\n cors: false,\n },\n {\n id: 'qwen-token-plan-cn',\n make: qwenTokenPlanCnProvider,\n env: 'QWEN_TOKEN_PLAN_CN_API_KEY',\n description: 'Qwen models on an Alibaba Cloud token plan in China.',\n keyUrl: 'https://bailian.console.aliyun.com',\n cors: false,\n },\n {\n id: 'qwen-token-plan-individual',\n make: qwenTokenPlanIndividualProvider,\n env: 'QWEN_TOKEN_PLAN_API_KEY',\n description: 'Qwen models on an individual Alibaba Cloud token plan.',\n keyUrl: 'https://modelstudio.console.alibabacloud.com',\n cors: false,\n },\n];\n\nexport type ProviderAuth = 'api-key' | 'oauth' | 'fields' | 'local';\n\nexport interface Listing {\n description: string;\n keyUrl?: string;\n auth: ProviderAuth;\n corsFree: boolean;\n vaultName: string;\n}\n\nconst upper = (text: string) => text.toUpperCase().replace(/[^A-Z0-9]/g, '_');\n\nfunction vaultNames(entries: readonly KeyProvider[]): Map<string, string> {\n const uses = Map.groupBy(entries, (entry) => entry.env);\n return new Map(\n entries.map((entry) => [\n entry.id,\n (uses.get(entry.env) as KeyProvider[]).length > 1 ? `${upper(entry.id)}_API_KEY` : entry.env,\n ])\n );\n}\n\nconst named = vaultNames(KEY_PROVIDERS);\n\nexport const LISTINGS: ReadonlyMap<string, Listing> = new Map<string, Listing>([\n [\n 'amazon-bedrock',\n {\n description: 'Claude and other models on AWS, with a Bedrock API key.',\n keyUrl: 'https://console.aws.amazon.com/bedrock/home#/api-keys',\n auth: 'fields',\n corsFree: true,\n vaultName: 'AWS_BEARER_TOKEN_BEDROCK',\n },\n ],\n [\n 'adobe',\n {\n description: 'Models through Adobe\u2019s LLM proxy, with your Adobe ID.',\n auth: 'oauth',\n corsFree: true,\n vaultName: 'ADOBE_IMS_TOKEN',\n },\n ],\n ...KEY_PROVIDERS.map((entry): [string, Listing] => [\n entry.id,\n {\n description: entry.description,\n keyUrl: entry.keyUrl,\n auth: 'api-key',\n corsFree: !entry.cors,\n vaultName: named.get(entry.id) as string,\n },\n ]),\n]);\n\nexport const ADDED_FIRST: readonly string[] = ['amazon-bedrock', 'adobe'];\n\nexport const VAULT_KNOWN: ReadonlySet<string> = new Set(\n [...LISTINGS.keys()].filter((id) => id !== 'adobe')\n);\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/dist/services.js CHANGED
@@ -126,6 +126,7 @@ const AgentSudoService = contract("slicc.agent.sudo", {
126
126
  const SETTINGS_METHODS = keys({
127
127
  connect: true,
128
128
  disconnect: true,
129
+ remove: true,
129
130
  signIn: true,
130
131
  dismissMoved: true
131
132
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/services.ts"],
4
- "sourcesContent": ["import type { Context, JsonValue, RemoteContract, ReplicatedState } from '@earendil-works/chord';\nimport type { ConversationView } from '@earendil-works/pi-durable';\nimport type { Approval, ApprovalAnswer, ApprovalDecided } from './approvals/index.ts';\nimport type {\n ApprovalPolicy,\n ApprovalPolicyChange,\n ApprovalPolicySet,\n} from './approvals/policy.ts';\nimport type { AgentSudo } from './approvals/sudo.ts';\nimport type { SendAttachment, ShownAttachment } from './attachments.ts';\nimport type { ChangesView } from './changes/git.ts';\nimport type { FrozenCone } from './freezer/index.ts';\nimport type { ImportProgress, ImportResult } from './freezer/v6.ts';\nimport type { GuestOpened, Proposed, ProposeRequest } from './guests/index.ts';\nimport type { GuestDraft, GuestGates, GuestSeat } from './guests/seats.ts';\nimport type { MemoryEntry, MemoryScope, MemoryTag } from './memory/format.ts';\nimport type { AgentRemote } from './remote/host.ts';\nimport type { AgentPages } from './remote/pages.ts';\nimport type { VaultState } from './secrets/vault.ts';\nimport { contract } from './serving.ts';\nimport type { SkillPackage, SkillSource } from './skills/skills.ts';\nimport type { Sprinkle } from './sprinkles/kind.ts';\n\nexport type SendMode = 'steer' | 'followUp' | 'reject';\n\nexport interface SendRequest {\n text: string;\n whenBusy: SendMode;\n requestId: string | null;\n agentId?: string | null;\n attachments?: SendAttachment[];\n}\n\nexport interface OperationError {\n code: string;\n message: string;\n}\n\nexport type SendResponse =\n | { accepted: true; submissionId: string; error: null }\n | { accepted: false; submissionId: null; error: OperationError };\n\nexport type PromptResult =\n | { status: 'done'; text: string; reason: null }\n | { status: 'unanswered'; text: null; reason: string };\n\nexport interface AgentControl {\n send(request: SendRequest, context: Context): Promise<SendResponse>;\n wait(submissionId: string, context: Context): Promise<PromptResult>;\n withdraw(\n submissionId: string,\n context: Context\n ): Promise<{ outcome: 'withdrawn' | 'already_placed' | 'not_found' }>;\n abort(context: Context): Promise<void>;\n compact(instructions: string | null, context: Context): Promise<SendResponse>;\n compactAgent(\n agentId: string,\n instructions: string | null,\n context: Context\n ): Promise<SendResponse>;\n reset(handoff: string | null, context: Context): Promise<void>;\n configure(change: AgentSettingsChange, context: Context): Promise<void>;\n rewind(messageId: string | null, context: Context): Promise<Rewound>;\n rewindAgent(agentId: string, messageId: string | null, context: Context): Promise<Rewound>;\n resolveLick(\n lickId: string,\n state: 'confirmed' | 'dismissed',\n context: Context\n ): Promise<LickResolved>;\n resolveAgentLick(\n agentId: string,\n lickId: string,\n state: 'confirmed' | 'dismissed',\n context: Context\n ): Promise<LickResolved>;\n webhook(\n name: string,\n delivery: WebhookRequest,\n context: Context\n ): Promise<{ delivered: boolean }>;\n stopAgent(agentId: string, context: Context): Promise<void>;\n selectCone(agentId: string, context: Context): Promise<void>;\n createCone(name: string, context: Context): Promise<Created>;\n createScoop(parentId: string, name: string, context: Context): Promise<Created>;\n drop(agentId: string, context: Context): Promise<Created>;\n unqueue(\n agentId: string | null,\n submissionId: string,\n context: Context\n ): Promise<{ outcome: 'withdrawn' | 'already_placed' | 'not_found' }>;\n sprinkleSend(\n sprinkleId: string,\n payload: { action: string; data: JsonValue | null; target: string | null },\n context: Context\n ): Promise<{ delivered: boolean }>;\n sprinkleCall(\n sprinkleId: string,\n method: string,\n args: JsonValue[],\n context: Context\n ): Promise<JsonValue>;\n memorySave(draft: MemoryDraft, context: Context): Promise<MemoryEntry>;\n memoryRemove(id: string, context: Context): Promise<{ removed: boolean }>;\n freeze(agentId: string, context: Context): Promise<Created>;\n newChat(agentId: string, context: Context): Promise<Created>;\n thaw(frozenId: string, context: Context): Promise<Created>;\n discard(frozenId: string, context: Context): Promise<Created>;\n importProfile(request: ImportRequest, context: Context): Promise<ImportResult>;\n importCancel(context: Context): Promise<void>;\n changesOpen(context: Context): Promise<void>;\n changeAccept(path: string, context: Context): Promise<Created>;\n changeRevert(path: string, context: Context): Promise<Created>;\n monitorOpen(lease: string | null, resync: boolean, context: Context): Promise<MonitorLease>;\n monitorClose(lease: string, context: Context): Promise<void>;\n image(ref: ImageRef, context: Context): Promise<StoredImage>;\n agentCommands(agentId: string, context: Context): Promise<Command[]>;\n toolLabel(agentId: string, callIds: string[], context: Context): Promise<string | null>;\n guestOpen(draft: GuestDraft, context: Context): Promise<GuestOpened>;\n guestRevoke(id: string, context: Context): Promise<{ revoked: boolean }>;\n guestAlwaysForget(\n seat: string,\n approval: string,\n context: Context\n ): Promise<{ removed: boolean }>;\n approvalPolicySet(change: ApprovalPolicyChange, context: Context): Promise<ApprovalPolicySet>;\n decide(\n id: string,\n decision: ApprovalAnswer,\n reason: string | null,\n context: Context\n ): Promise<ApprovalDecided>;\n}\n\nexport interface ImportRequest {\n upload: string | null;\n data: string | null;\n again: boolean;\n preview: boolean;\n}\n\nexport interface ImageRef {\n entry: number;\n message: number;\n part: number;\n}\n\nexport type StoredImage = { data: string; mimeType: string } | { data: null; mimeType: null };\n\nexport interface MonitorLease {\n lease: string;\n ttlMs: number;\n}\n\nexport interface MonitorAgent {\n id: string;\n name: string;\n kind: 'cone' | 'scoop';\n parentId: string | null;\n model: string | null;\n running: boolean;\n queued: number;\n tool: string | null;\n retry: { attempt: number; since: number; error: string } | null;\n failed: string | null;\n context: number | null;\n cpu?: number | null;\n}\n\nexport interface MonitorTask {\n id: string;\n kind: string;\n detail: string | null;\n agentId: string | null;\n owner: string | null;\n status: 'pending' | 'running' | 'waiting' | 'completing';\n phase: string;\n background: boolean;\n aborting: number | null;\n since: number;\n waits: number;\n}\n\nexport interface MonitorProcess {\n pid: number;\n ppid: number;\n pgid: number;\n user: string | null;\n agentId: string | null;\n command: string;\n state: 'S' | 'Z';\n started: number;\n zombie: number | null;\n tty: boolean;\n rss: number | null;\n utime?: number;\n stime?: number;\n cpu?: number | null;\n}\n\nexport interface MonitorProblem {\n id: string;\n at: number;\n agentId: string | null;\n kind: 'task' | 'retry' | 'turn';\n message: string;\n}\n\nexport interface MonitorFeed {\n open: boolean;\n at: number;\n usage: { tokens: number; cost: number; free: boolean } | null;\n agents: MonitorAgent[];\n tasks: MonitorTask[];\n processes: MonitorProcess[] | null;\n kernel: 'checking' | 'ok' | 'unreachable';\n problems: MonitorProblem[];\n paused: boolean;\n}\n\nexport interface MemoryDraft {\n id: string | null;\n scope: string;\n section: string;\n title: string;\n body: string;\n tag: MemoryTag | null;\n}\n\nexport type Created = { id: string; error: null } | { id: null; error: string };\n\nexport interface AgentSummary {\n id: string;\n name: string;\n kind: 'cone' | 'scoop';\n parentId: string | null;\n role: string | null;\n}\n\nexport interface AgentsSummary {\n active: string;\n agents: AgentSummary[];\n}\n\nexport type LickResolved =\n | { done: true; text: string; error: null }\n | { done: false; text: null; error: string };\n\nexport interface WebhookRequest {\n id: string | null;\n headers: Record<string, string>;\n body: string;\n}\n\nexport type Rewound =\n | { done: true; text: string; reason: null; attachments?: ShownAttachment[] }\n | { done: false; text: null; reason: 'busy' | 'no-turn' };\n\nexport interface AgentSettingsChange {\n model: { provider: string; modelId: string } | null;\n thinkingLevel: 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null;\n agentId?: string | null;\n}\n\nconst keys = <T>(record: Record<keyof T, true>) => Object.keys(record) as (keyof T & string)[];\n\nexport const CONTROL_METHODS = keys<AgentControl>({\n send: true,\n wait: true,\n withdraw: true,\n abort: true,\n compact: true,\n compactAgent: true,\n reset: true,\n configure: true,\n rewind: true,\n rewindAgent: true,\n resolveLick: true,\n resolveAgentLick: true,\n webhook: true,\n stopAgent: true,\n selectCone: true,\n createCone: true,\n createScoop: true,\n drop: true,\n unqueue: true,\n sprinkleSend: true,\n sprinkleCall: true,\n memorySave: true,\n memoryRemove: true,\n freeze: true,\n newChat: true,\n thaw: true,\n discard: true,\n importProfile: true,\n importCancel: true,\n changesOpen: true,\n changeAccept: true,\n changeRevert: true,\n monitorOpen: true,\n monitorClose: true,\n image: true,\n agentCommands: true,\n toolLabel: true,\n guestOpen: true,\n guestRevoke: true,\n guestAlwaysForget: true,\n approvalPolicySet: true,\n decide: true,\n});\n\nexport const OWNER_DEVICE_METHODS: readonly (keyof AgentControl & string)[] = [\n 'decide',\n 'guestOpen',\n 'guestRevoke',\n 'guestAlwaysForget',\n 'approvalPolicySet',\n];\n\nexport const CONTROL_READS: readonly (keyof AgentControl & string)[] = [\n 'wait',\n 'changesOpen',\n 'monitorOpen',\n 'monitorClose',\n 'image',\n 'toolLabel',\n];\n\nexport const AgentControl: RemoteContract = contract('slicc.agent.control', {\n control: { methods: CONTROL_METHODS },\n view: { methods: [...CONTROL_READS, ...OWNER_DEVICE_METHODS] },\n});\n\nexport type Delivered = 'run' | 'steer' | 'follow-up';\n\nexport interface AgentTranscript {\n readonly state: ReplicatedState<ConversationView>;\n readonly deliveries: ReplicatedState<Record<string, Delivered>>;\n readonly agents: ReplicatedState<AgentsSummary>;\n readonly views: ReplicatedState<Record<string, ConversationView>>;\n readonly commands: ReplicatedState<Command[]>;\n readonly privateRevision: ReplicatedState<PrivateRevision>;\n readonly sprinkles: ReplicatedState<Sprinkle[]>;\n readonly memories: ReplicatedState<MemoryEntry[]>;\n readonly memoryScopes: ReplicatedState<MemoryScope[]>;\n readonly frozen: ReplicatedState<FrozenCone[]>;\n readonly importing: ReplicatedState<ImportProgress>;\n readonly changes: ReplicatedState<ChangesView>;\n readonly monitor: ReplicatedState<MonitorFeed>;\n readonly vault: ReplicatedState<VaultState>;\n readonly labels: ReplicatedState<Record<string, string>>;\n readonly guests: ReplicatedState<GuestSeat[]>;\n readonly approvals: ReplicatedState<Approval[]>;\n readonly approvalPolicy: ReplicatedState<ApprovalPolicy>;\n}\n\nexport interface PrivateRevision {\n revision: number;\n}\n\nexport interface Command {\n name: string;\n description: string;\n kind: 'prompt' | 'skill' | 'action';\n source?: SkillSource;\n package?: SkillPackage;\n}\n\nexport const TRANSCRIPT_STATES = keys<AgentTranscript>({\n state: true,\n deliveries: true,\n agents: true,\n views: true,\n commands: true,\n privateRevision: true,\n sprinkles: true,\n memories: true,\n memoryScopes: true,\n frozen: true,\n importing: true,\n changes: true,\n monitor: true,\n vault: true,\n labels: true,\n guests: true,\n approvals: true,\n approvalPolicy: true,\n});\n\nexport const AgentTranscript: RemoteContract = contract('slicc.agent.transcript', {\n transcript: { state: TRANSCRIPT_STATES },\n});\n\nexport const REMOTE_METHODS = keys<AgentRemote>({\n prompt: true,\n watch: true,\n next: true,\n close: true,\n abort: true,\n});\n\nexport const REMOTE_READS: readonly (keyof AgentRemote & string)[] = ['watch', 'next', 'close'];\n\nexport interface GuestShown {\n id: string;\n label: string;\n agentId: string;\n name: string;\n expiresAt: number | null;\n gates: GuestGates;\n}\n\nexport interface GuestProposal {\n id: string;\n text: string;\n state: 'queued' | 'pending' | 'approved' | 'rejected' | 'unanswered' | 'withdrawn';\n reason: string | null;\n createdAt: number;\n decidedAt: number | null;\n}\n\nexport interface AgentGuest {\n readonly transcript: ReplicatedState<ConversationView>;\n readonly seat: ReplicatedState<GuestShown>;\n readonly proposals: ReplicatedState<GuestProposal[]>;\n propose(request: ProposeRequest, context: Context): Promise<Proposed>;\n guestOpen(draft: GuestDraft, context: Context): Promise<GuestOpened>;\n guestRevoke(id: string, context: Context): Promise<{ revoked: boolean }>;\n}\n\nexport const GUEST_STATES = ['transcript', 'seat', 'proposals'] as const;\n\nexport const GUEST_METHODS = ['propose', 'guestOpen', 'guestRevoke'] as const;\n\nexport const AgentGuestService: RemoteContract = contract('slicc.agent.guest', {\n guest: { state: GUEST_STATES, methods: GUEST_METHODS },\n none: {},\n});\n\nexport const AgentRemoteService: RemoteContract = contract('slicc.agent.remote', {\n remote: { methods: REMOTE_METHODS },\n watch: { methods: REMOTE_READS },\n});\n\nexport const PAGE_METHODS = keys<AgentPages>({\n open: true,\n report: true,\n next: true,\n answer: true,\n close: true,\n});\n\nexport const AgentPagesService: RemoteContract = contract('slicc.agent.pages', {\n pages: { methods: PAGE_METHODS },\n none: {},\n});\n\nexport const SUDO_METHODS = keys<Omit<AgentSudo, 'approvals'>>({\n request: true,\n withdraw: true,\n});\n\nexport const AgentSudoService: RemoteContract = contract('slicc.agent.sudo', {\n sudo: { state: ['approvals'], methods: SUDO_METHODS },\n none: {},\n});\n\nexport interface ModelChoice {\n id: string;\n label: string;\n provider: string;\n kind: 'chat' | 'classifier';\n reasoning: boolean;\n images?: boolean;\n contextWindow: number;\n}\n\nexport interface AccountState {\n id: string;\n provider: string;\n identity: string;\n status: 'connected' | 'disconnected' | 'expired';\n auth: 'api-key' | 'oauth';\n needs: 'cors-free-transport' | null;\n group?: 'providers' | 'mcp';\n secret?: 'api-key' | 'token';\n store?: 'vault';\n fields?: AccountField[];\n}\n\nexport interface AccountField {\n name: string;\n label: string;\n required?: boolean;\n}\n\nexport interface BudgetState {\n provider: string;\n percent: number;\n window: 'weekly';\n resets: string;\n}\n\nexport interface SignIn {\n clientId: string;\n scopes: string;\n imsEnvironment: string;\n}\n\nexport interface McpSignIn {\n url: string;\n state: string;\n}\n\nexport interface SettingsState {\n models: ModelChoice[];\n accounts: AccountState[];\n budget?: BudgetState | null;\n moved?: { kind: 'model' | 'mcp'; label: string }[];\n labels?: Record<string, string>;\n}\n\nexport interface AgentSettings {\n readonly state: ReplicatedState<SettingsState>;\n connect(\n providerId: string,\n secret: string | null,\n fields: Record<string, string> | null,\n context: Context\n ): Promise<void>;\n disconnect(providerId: string, context: Context): Promise<void>;\n signIn(providerId: string, context: Context): Promise<SignIn | McpSignIn | null>;\n dismissMoved(context: Context): Promise<void>;\n}\n\nexport const SETTINGS_METHODS = keys<Omit<AgentSettings, 'state'>>({\n connect: true,\n disconnect: true,\n signIn: true,\n dismissMoved: true,\n});\n\nexport const AgentSettings: RemoteContract = contract('slicc.agent.settings', {\n settings: { state: ['state'], methods: SETTINGS_METHODS },\n view: { state: ['state'] },\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { Context, JsonValue, RemoteContract, ReplicatedState } from '@earendil-works/chord';\nimport type { ConversationView } from '@earendil-works/pi-durable';\nimport type { Approval, ApprovalAnswer, ApprovalDecided } from './approvals/index.ts';\nimport type {\n ApprovalPolicy,\n ApprovalPolicyChange,\n ApprovalPolicySet,\n} from './approvals/policy.ts';\nimport type { AgentSudo } from './approvals/sudo.ts';\nimport type { SendAttachment, ShownAttachment } from './attachments.ts';\nimport type { ChangesView } from './changes/git.ts';\nimport type { FrozenCone } from './freezer/index.ts';\nimport type { ImportProgress, ImportResult } from './freezer/v6.ts';\nimport type { GuestOpened, Proposed, ProposeRequest } from './guests/index.ts';\nimport type { GuestDraft, GuestGates, GuestSeat } from './guests/seats.ts';\nimport type { MemoryEntry, MemoryScope, MemoryTag } from './memory/format.ts';\nimport type { AgentRemote } from './remote/host.ts';\nimport type { AgentPages } from './remote/pages.ts';\nimport type { VaultState } from './secrets/vault.ts';\nimport { contract } from './serving.ts';\nimport type { SkillPackage, SkillSource } from './skills/skills.ts';\nimport type { Sprinkle } from './sprinkles/kind.ts';\n\nexport type SendMode = 'steer' | 'followUp' | 'reject';\n\nexport interface SendRequest {\n text: string;\n whenBusy: SendMode;\n requestId: string | null;\n agentId?: string | null;\n attachments?: SendAttachment[];\n}\n\nexport interface OperationError {\n code: string;\n message: string;\n}\n\nexport type SendResponse =\n | { accepted: true; submissionId: string; error: null }\n | { accepted: false; submissionId: null; error: OperationError };\n\nexport type PromptResult =\n | { status: 'done'; text: string; reason: null }\n | { status: 'unanswered'; text: null; reason: string };\n\nexport interface AgentControl {\n send(request: SendRequest, context: Context): Promise<SendResponse>;\n wait(submissionId: string, context: Context): Promise<PromptResult>;\n withdraw(\n submissionId: string,\n context: Context\n ): Promise<{ outcome: 'withdrawn' | 'already_placed' | 'not_found' }>;\n abort(context: Context): Promise<void>;\n compact(instructions: string | null, context: Context): Promise<SendResponse>;\n compactAgent(\n agentId: string,\n instructions: string | null,\n context: Context\n ): Promise<SendResponse>;\n reset(handoff: string | null, context: Context): Promise<void>;\n configure(change: AgentSettingsChange, context: Context): Promise<void>;\n rewind(messageId: string | null, context: Context): Promise<Rewound>;\n rewindAgent(agentId: string, messageId: string | null, context: Context): Promise<Rewound>;\n resolveLick(\n lickId: string,\n state: 'confirmed' | 'dismissed',\n context: Context\n ): Promise<LickResolved>;\n resolveAgentLick(\n agentId: string,\n lickId: string,\n state: 'confirmed' | 'dismissed',\n context: Context\n ): Promise<LickResolved>;\n webhook(\n name: string,\n delivery: WebhookRequest,\n context: Context\n ): Promise<{ delivered: boolean }>;\n stopAgent(agentId: string, context: Context): Promise<void>;\n selectCone(agentId: string, context: Context): Promise<void>;\n createCone(name: string, context: Context): Promise<Created>;\n createScoop(parentId: string, name: string, context: Context): Promise<Created>;\n drop(agentId: string, context: Context): Promise<Created>;\n unqueue(\n agentId: string | null,\n submissionId: string,\n context: Context\n ): Promise<{ outcome: 'withdrawn' | 'already_placed' | 'not_found' }>;\n sprinkleSend(\n sprinkleId: string,\n payload: { action: string; data: JsonValue | null; target: string | null },\n context: Context\n ): Promise<{ delivered: boolean }>;\n sprinkleCall(\n sprinkleId: string,\n method: string,\n args: JsonValue[],\n context: Context\n ): Promise<JsonValue>;\n memorySave(draft: MemoryDraft, context: Context): Promise<MemoryEntry>;\n memoryRemove(id: string, context: Context): Promise<{ removed: boolean }>;\n freeze(agentId: string, context: Context): Promise<Created>;\n newChat(agentId: string, context: Context): Promise<Created>;\n thaw(frozenId: string, context: Context): Promise<Created>;\n discard(frozenId: string, context: Context): Promise<Created>;\n importProfile(request: ImportRequest, context: Context): Promise<ImportResult>;\n importCancel(context: Context): Promise<void>;\n changesOpen(context: Context): Promise<void>;\n changeAccept(path: string, context: Context): Promise<Created>;\n changeRevert(path: string, context: Context): Promise<Created>;\n monitorOpen(lease: string | null, resync: boolean, context: Context): Promise<MonitorLease>;\n monitorClose(lease: string, context: Context): Promise<void>;\n image(ref: ImageRef, context: Context): Promise<StoredImage>;\n agentCommands(agentId: string, context: Context): Promise<Command[]>;\n toolLabel(agentId: string, callIds: string[], context: Context): Promise<string | null>;\n guestOpen(draft: GuestDraft, context: Context): Promise<GuestOpened>;\n guestRevoke(id: string, context: Context): Promise<{ revoked: boolean }>;\n guestAlwaysForget(\n seat: string,\n approval: string,\n context: Context\n ): Promise<{ removed: boolean }>;\n approvalPolicySet(change: ApprovalPolicyChange, context: Context): Promise<ApprovalPolicySet>;\n decide(\n id: string,\n decision: ApprovalAnswer,\n reason: string | null,\n context: Context\n ): Promise<ApprovalDecided>;\n}\n\nexport interface ImportRequest {\n upload: string | null;\n data: string | null;\n again: boolean;\n preview: boolean;\n}\n\nexport interface ImageRef {\n entry: number;\n message: number;\n part: number;\n}\n\nexport type StoredImage = { data: string; mimeType: string } | { data: null; mimeType: null };\n\nexport interface MonitorLease {\n lease: string;\n ttlMs: number;\n}\n\nexport interface MonitorAgent {\n id: string;\n name: string;\n kind: 'cone' | 'scoop';\n parentId: string | null;\n model: string | null;\n running: boolean;\n queued: number;\n tool: string | null;\n retry: { attempt: number; since: number; error: string } | null;\n failed: string | null;\n context: number | null;\n cpu?: number | null;\n}\n\nexport interface MonitorTask {\n id: string;\n kind: string;\n detail: string | null;\n agentId: string | null;\n owner: string | null;\n status: 'pending' | 'running' | 'waiting' | 'completing';\n phase: string;\n background: boolean;\n aborting: number | null;\n since: number;\n waits: number;\n}\n\nexport interface MonitorProcess {\n pid: number;\n ppid: number;\n pgid: number;\n user: string | null;\n agentId: string | null;\n command: string;\n state: 'S' | 'Z';\n started: number;\n zombie: number | null;\n tty: boolean;\n rss: number | null;\n utime?: number;\n stime?: number;\n cpu?: number | null;\n}\n\nexport interface MonitorProblem {\n id: string;\n at: number;\n agentId: string | null;\n kind: 'task' | 'retry' | 'turn';\n message: string;\n}\n\nexport interface MonitorFeed {\n open: boolean;\n at: number;\n usage: { tokens: number; cost: number; free: boolean } | null;\n agents: MonitorAgent[];\n tasks: MonitorTask[];\n processes: MonitorProcess[] | null;\n kernel: 'checking' | 'ok' | 'unreachable';\n problems: MonitorProblem[];\n paused: boolean;\n}\n\nexport interface MemoryDraft {\n id: string | null;\n scope: string;\n section: string;\n title: string;\n body: string;\n tag: MemoryTag | null;\n}\n\nexport type Created = { id: string; error: null } | { id: null; error: string };\n\nexport interface AgentSummary {\n id: string;\n name: string;\n kind: 'cone' | 'scoop';\n parentId: string | null;\n role: string | null;\n}\n\nexport interface AgentsSummary {\n active: string;\n agents: AgentSummary[];\n}\n\nexport type LickResolved =\n | { done: true; text: string; error: null }\n | { done: false; text: null; error: string };\n\nexport interface WebhookRequest {\n id: string | null;\n headers: Record<string, string>;\n body: string;\n}\n\nexport type Rewound =\n | { done: true; text: string; reason: null; attachments?: ShownAttachment[] }\n | { done: false; text: null; reason: 'busy' | 'no-turn' };\n\nexport interface AgentSettingsChange {\n model: { provider: string; modelId: string } | null;\n thinkingLevel: 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null;\n agentId?: string | null;\n}\n\nconst keys = <T>(record: Record<keyof T, true>) => Object.keys(record) as (keyof T & string)[];\n\nexport const CONTROL_METHODS = keys<AgentControl>({\n send: true,\n wait: true,\n withdraw: true,\n abort: true,\n compact: true,\n compactAgent: true,\n reset: true,\n configure: true,\n rewind: true,\n rewindAgent: true,\n resolveLick: true,\n resolveAgentLick: true,\n webhook: true,\n stopAgent: true,\n selectCone: true,\n createCone: true,\n createScoop: true,\n drop: true,\n unqueue: true,\n sprinkleSend: true,\n sprinkleCall: true,\n memorySave: true,\n memoryRemove: true,\n freeze: true,\n newChat: true,\n thaw: true,\n discard: true,\n importProfile: true,\n importCancel: true,\n changesOpen: true,\n changeAccept: true,\n changeRevert: true,\n monitorOpen: true,\n monitorClose: true,\n image: true,\n agentCommands: true,\n toolLabel: true,\n guestOpen: true,\n guestRevoke: true,\n guestAlwaysForget: true,\n approvalPolicySet: true,\n decide: true,\n});\n\nexport const OWNER_DEVICE_METHODS: readonly (keyof AgentControl & string)[] = [\n 'decide',\n 'guestOpen',\n 'guestRevoke',\n 'guestAlwaysForget',\n 'approvalPolicySet',\n];\n\nexport const CONTROL_READS: readonly (keyof AgentControl & string)[] = [\n 'wait',\n 'changesOpen',\n 'monitorOpen',\n 'monitorClose',\n 'image',\n 'toolLabel',\n];\n\nexport const AgentControl: RemoteContract = contract('slicc.agent.control', {\n control: { methods: CONTROL_METHODS },\n view: { methods: [...CONTROL_READS, ...OWNER_DEVICE_METHODS] },\n});\n\nexport type Delivered = 'run' | 'steer' | 'follow-up';\n\nexport interface AgentTranscript {\n readonly state: ReplicatedState<ConversationView>;\n readonly deliveries: ReplicatedState<Record<string, Delivered>>;\n readonly agents: ReplicatedState<AgentsSummary>;\n readonly views: ReplicatedState<Record<string, ConversationView>>;\n readonly commands: ReplicatedState<Command[]>;\n readonly privateRevision: ReplicatedState<PrivateRevision>;\n readonly sprinkles: ReplicatedState<Sprinkle[]>;\n readonly memories: ReplicatedState<MemoryEntry[]>;\n readonly memoryScopes: ReplicatedState<MemoryScope[]>;\n readonly frozen: ReplicatedState<FrozenCone[]>;\n readonly importing: ReplicatedState<ImportProgress>;\n readonly changes: ReplicatedState<ChangesView>;\n readonly monitor: ReplicatedState<MonitorFeed>;\n readonly vault: ReplicatedState<VaultState>;\n readonly labels: ReplicatedState<Record<string, string>>;\n readonly guests: ReplicatedState<GuestSeat[]>;\n readonly approvals: ReplicatedState<Approval[]>;\n readonly approvalPolicy: ReplicatedState<ApprovalPolicy>;\n}\n\nexport interface PrivateRevision {\n revision: number;\n}\n\nexport interface Command {\n name: string;\n description: string;\n kind: 'prompt' | 'skill' | 'action';\n source?: SkillSource;\n package?: SkillPackage;\n}\n\nexport const TRANSCRIPT_STATES = keys<AgentTranscript>({\n state: true,\n deliveries: true,\n agents: true,\n views: true,\n commands: true,\n privateRevision: true,\n sprinkles: true,\n memories: true,\n memoryScopes: true,\n frozen: true,\n importing: true,\n changes: true,\n monitor: true,\n vault: true,\n labels: true,\n guests: true,\n approvals: true,\n approvalPolicy: true,\n});\n\nexport const AgentTranscript: RemoteContract = contract('slicc.agent.transcript', {\n transcript: { state: TRANSCRIPT_STATES },\n});\n\nexport const REMOTE_METHODS = keys<AgentRemote>({\n prompt: true,\n watch: true,\n next: true,\n close: true,\n abort: true,\n});\n\nexport const REMOTE_READS: readonly (keyof AgentRemote & string)[] = ['watch', 'next', 'close'];\n\nexport interface GuestShown {\n id: string;\n label: string;\n agentId: string;\n name: string;\n expiresAt: number | null;\n gates: GuestGates;\n}\n\nexport interface GuestProposal {\n id: string;\n text: string;\n state: 'queued' | 'pending' | 'approved' | 'rejected' | 'unanswered' | 'withdrawn';\n reason: string | null;\n createdAt: number;\n decidedAt: number | null;\n}\n\nexport interface AgentGuest {\n readonly transcript: ReplicatedState<ConversationView>;\n readonly seat: ReplicatedState<GuestShown>;\n readonly proposals: ReplicatedState<GuestProposal[]>;\n propose(request: ProposeRequest, context: Context): Promise<Proposed>;\n guestOpen(draft: GuestDraft, context: Context): Promise<GuestOpened>;\n guestRevoke(id: string, context: Context): Promise<{ revoked: boolean }>;\n}\n\nexport const GUEST_STATES = ['transcript', 'seat', 'proposals'] as const;\n\nexport const GUEST_METHODS = ['propose', 'guestOpen', 'guestRevoke'] as const;\n\nexport const AgentGuestService: RemoteContract = contract('slicc.agent.guest', {\n guest: { state: GUEST_STATES, methods: GUEST_METHODS },\n none: {},\n});\n\nexport const AgentRemoteService: RemoteContract = contract('slicc.agent.remote', {\n remote: { methods: REMOTE_METHODS },\n watch: { methods: REMOTE_READS },\n});\n\nexport const PAGE_METHODS = keys<AgentPages>({\n open: true,\n report: true,\n next: true,\n answer: true,\n close: true,\n});\n\nexport const AgentPagesService: RemoteContract = contract('slicc.agent.pages', {\n pages: { methods: PAGE_METHODS },\n none: {},\n});\n\nexport const SUDO_METHODS = keys<Omit<AgentSudo, 'approvals'>>({\n request: true,\n withdraw: true,\n});\n\nexport const AgentSudoService: RemoteContract = contract('slicc.agent.sudo', {\n sudo: { state: ['approvals'], methods: SUDO_METHODS },\n none: {},\n});\n\nexport interface ModelChoice {\n id: string;\n label: string;\n provider: string;\n kind: 'chat' | 'classifier';\n reasoning: boolean;\n images?: boolean;\n contextWindow: number;\n}\n\nexport interface AccountState {\n id: string;\n provider: string;\n identity: string;\n status: 'connected' | 'disconnected' | 'expired';\n auth: 'api-key' | 'oauth';\n needs: 'cors-free-transport' | null;\n group?: 'providers' | 'mcp';\n secret?: 'api-key' | 'token';\n store?: 'vault';\n fields?: AccountField[];\n description?: string;\n keyUrl?: string;\n vaultName?: string;\n}\n\nexport interface AccountField {\n name: string;\n label: string;\n required?: boolean;\n placeholder?: string;\n help?: string;\n}\n\nexport interface ProviderOption {\n id: string;\n name: string;\n description?: string;\n auth: 'api-key' | 'oauth' | 'fields' | 'local';\n fields?: AccountField[];\n keyUrl?: string;\n needs?: 'cors-free-transport';\n vaultName?: string;\n}\n\nexport interface BudgetState {\n provider: string;\n percent: number;\n window: 'weekly';\n resets: string;\n}\n\nexport interface SignIn {\n clientId: string;\n scopes: string;\n imsEnvironment: string;\n}\n\nexport interface McpSignIn {\n url: string;\n state: string;\n}\n\nexport interface SettingsState {\n models: ModelChoice[];\n accounts: AccountState[];\n providers?: ProviderOption[];\n budget?: BudgetState | null;\n moved?: { kind: 'model' | 'mcp'; label: string }[];\n labels?: Record<string, string>;\n}\n\nexport interface AgentSettings {\n readonly state: ReplicatedState<SettingsState>;\n connect(\n providerId: string,\n secret: string | null,\n fields: Record<string, string> | null,\n context: Context\n ): Promise<void>;\n disconnect(providerId: string, context: Context): Promise<void>;\n remove(providerId: string, context: Context): Promise<void>;\n signIn(providerId: string, context: Context): Promise<SignIn | McpSignIn | null>;\n dismissMoved(context: Context): Promise<void>;\n}\n\nexport const SETTINGS_METHODS = keys<Omit<AgentSettings, 'state'>>({\n connect: true,\n disconnect: true,\n remove: true,\n signIn: true,\n dismissMoved: true,\n});\n\nexport const AgentSettings: RemoteContract = contract('slicc.agent.settings', {\n settings: { state: ['state'], methods: SETTINGS_METHODS },\n view: { state: ['state'] },\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }