@psnext/slingcli 2.5.20260718-2 → 2.5.20260719-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/sling.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +10 -10
- package/node_modules/@earendil-works/pi-coding-agent/docs/docs.json +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/index.md +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/mcp.md +383 -0
- package/package.json +2 -2
- package/sling-default-packages.json +6 -4
- package/slingshot/index.js +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":202752,"maxTokens":131072},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":250000},"Qwen/Qwen2.5-7B-Instruct-Turbo":{"id":"Qwen/Qwen2.5-7B-Instruct-Turbo","name":"Qwen 2.5 7B Instruct Turbo","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":32768,"maxTokens":32768},"Qwen/Qwen3-235B-A22B-Instruct-2507-tput":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507-tput","name":"Qwen3 235B A22B Instruct 2507 FP8","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":0.2,"output":0.6,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":262144},"Qwen/Qwen3.5-397B-A17B":{"id":"Qwen/Qwen3.5-397B-A17B","name":"Qwen3.5 397B A17B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.6,"output":3.6,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":130000},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.17,"output":0.25,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":65536},"Qwen/Qwen3.6-Plus":{"id":"Qwen/Qwen3.6-Plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"Qwen/Qwen3.7-Max":{"id":"Qwen/Qwen3.7-Max","name":"Qwen3.7 Max","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.25,"output":3.75,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null},"input":["text"],"cost":{"input":1.74,"output":3.48,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512000,"maxTokens":384000},"essentialai/Rnj-1-Instruct":{"id":"essentialai/Rnj-1-Instruct","name":"Rnj-1 Instruct","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":0.15,"output":0.15,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":32768,"maxTokens":32768},"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B Instruct","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.39,"output":0.97,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{"id":"meta-llama/Llama-3.3-70B-Instruct-Turbo","name":"Llama 3.3 70B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.04,"output":1.04,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1.2,"output":4.5,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131000},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.6,"output":3.6,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512300,"maxTokens":512300},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null},"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null},"input":["text"],"cost":{"input":0.05,"output":0.2,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1,"output":4.05,"cacheRead":0.17,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":131072},"zai-org/GLM-5":{"id":"zai-org/GLM-5","name":"GLM-5","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":1,"output":3.2,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":202752,"maxTokens":131072},"zai-org/GLM-5.1":{"id":"zai-org/GLM-5.1","name":"GLM-5.1","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":202752,"maxTokens":131072},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":164000}}
|
|
1
|
+
{"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":202752,"maxTokens":131072},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":250000},"Qwen/Qwen2.5-7B-Instruct-Turbo":{"id":"Qwen/Qwen2.5-7B-Instruct-Turbo","name":"Qwen 2.5 7B Instruct Turbo","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":32768,"maxTokens":32768},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.17,"output":0.25,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":65536},"Qwen/Qwen3.6-Plus":{"id":"Qwen/Qwen3.6-Plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"Qwen/Qwen3.7-Max":{"id":"Qwen/Qwen3.7-Max","name":"Qwen3.7 Max","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.25,"output":3.75,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null},"input":["text"],"cost":{"input":1.74,"output":3.48,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512000,"maxTokens":384000},"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B Instruct","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.39,"output":0.97,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{"id":"meta-llama/Llama-3.3-70B-Instruct-Turbo","name":"Llama 3.3 70B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.04,"output":1.04,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1.2,"output":4.5,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131000},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.6,"output":3.6,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512300,"maxTokens":512300},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null},"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null},"input":["text"],"cost":{"input":0.05,"output":0.2,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1,"output":4.05,"cacheRead":0.17,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":131072},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":164000}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","api":"openai-completions","provider":"xai","baseUrl":"https://api.x.ai/v1","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":2.5,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1000000,"maxTokens":30000,"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","api":"openai-responses","provider":"xai","baseUrl":"https://api.x.ai/v1","compat":{"supportsLongCacheRetention":false},"reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.
|
|
1
|
+
{"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","api":"openai-completions","provider":"xai","baseUrl":"https://api.x.ai/v1","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":2.5,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1000000,"maxTokens":30000,"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","api":"openai-responses","provider":"xai","baseUrl":"https://api.x.ai/v1","compat":{"supportsLongCacheRetention":false},"reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.3,"cacheWrite":0},"contextWindow":500000,"maxTokens":500000,"thinkingLevelMap":{"off":null,"minimal":null}},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","api":"openai-completions","provider":"xai","baseUrl":"https://api.x.ai/v1","reasoning":true,"input":["text","image"],"cost":{"input":1,"output":2,"cacheRead":0.2,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000,"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}}}
|
package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js
CHANGED
|
@@ -191,9 +191,8 @@ export class InteractiveMode {
|
|
|
191
191
|
hiddenThinkingLabel = this.defaultHiddenThinkingLabel;
|
|
192
192
|
lastSigintTime = 0;
|
|
193
193
|
lastEscapeTime = 0;
|
|
194
|
-
changelogMarkdown = undefined;
|
|
195
194
|
startupNoticesShown = false;
|
|
196
|
-
|
|
195
|
+
Shown = false;
|
|
197
196
|
// Status line tracking (for mutating immediately-sequential status updates)
|
|
198
197
|
lastStatusSpacer = undefined;
|
|
199
198
|
lastStatusText = undefined;
|
|
@@ -433,7 +432,7 @@ export class InteractiveMode {
|
|
|
433
432
|
return;
|
|
434
433
|
this.registerSignalHandlers();
|
|
435
434
|
// Load changelog (only show new entries, skip for resumed sessions)
|
|
436
|
-
this.changelogMarkdown = this.getChangelogForDisplay();
|
|
435
|
+
// this.changelogMarkdown = this.getChangelogForDisplay();
|
|
437
436
|
// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir)
|
|
438
437
|
// Both are needed: fd for autocomplete, rg for grep tool and bash commands
|
|
439
438
|
const [fdPath] = await Promise.all([ensureTool("fd"), ensureTool("rg")]);
|
|
@@ -472,7 +471,8 @@ export class InteractiveMode {
|
|
|
472
471
|
await this.themeController.applyFromSettings();
|
|
473
472
|
// Add header with keybindings from config (unless silenced)
|
|
474
473
|
if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
|
|
475
|
-
const logo = theme.bold(theme.fg("accent", APP_NAME)) +
|
|
474
|
+
const logo = theme.bold(theme.fg("accent", APP_NAME)) +
|
|
475
|
+
theme.fg("dim", ` v${process.env.SLING_VERSION ?? this.version}`);
|
|
476
476
|
// Build startup instructions using keybinding hint helpers
|
|
477
477
|
const hint = (keybinding, description) => keyHint(keybinding, description);
|
|
478
478
|
const expandedInstructions = [
|
|
@@ -504,7 +504,7 @@ export class InteractiveMode {
|
|
|
504
504
|
hint("app.tools.expand", "more"),
|
|
505
505
|
].join(theme.fg("muted", " · "));
|
|
506
506
|
const compactOnboarding = theme.fg("dim", `Press ${keyText("app.tools.expand")} to show full startup help and loaded resources.`);
|
|
507
|
-
const onboarding = theme.fg("dim", `
|
|
507
|
+
const onboarding = theme.fg("dim", `Sling can explain its own features and look up its docs. Ask it how to use or extend Sling.`);
|
|
508
508
|
this.builtInHeader = new ExpandableText(() => `${logo}\n${compactInstructions}\n${compactOnboarding}\n\n${onboarding}`, () => `${logo}\n${expandedInstructions}\n\n${onboarding}`, this.getStartupExpansionState(), 1, 0);
|
|
509
509
|
// Setup UI layout
|
|
510
510
|
this.headerContainer.addChild(new Spacer(1));
|
|
@@ -3576,15 +3576,15 @@ export class InteractiveMode {
|
|
|
3576
3576
|
if (this.settingsManager.getWarnings().anthropicExtraUsage === false) {
|
|
3577
3577
|
return;
|
|
3578
3578
|
}
|
|
3579
|
-
if (this.anthropicSubscriptionWarningShown) {
|
|
3580
|
-
|
|
3581
|
-
}
|
|
3579
|
+
// if (this.anthropicSubscriptionWarningShown) {
|
|
3580
|
+
// return;
|
|
3581
|
+
// }
|
|
3582
3582
|
if (!model || model.provider !== "anthropic") {
|
|
3583
3583
|
return;
|
|
3584
3584
|
}
|
|
3585
3585
|
try {
|
|
3586
3586
|
if ((await this.session.modelRuntime.checkAuth("anthropic"))?.type === "oauth") {
|
|
3587
|
-
this.anthropicSubscriptionWarningShown = true;
|
|
3587
|
+
//this.anthropicSubscriptionWarningShown = true;
|
|
3588
3588
|
this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);
|
|
3589
3589
|
return;
|
|
3590
3590
|
}
|
|
@@ -3592,7 +3592,7 @@ export class InteractiveMode {
|
|
|
3592
3592
|
if (!isAnthropicSubscriptionAuthKey(apiKey)) {
|
|
3593
3593
|
return;
|
|
3594
3594
|
}
|
|
3595
|
-
this.anthropicSubscriptionWarningShown = true;
|
|
3595
|
+
//this.anthropicSubscriptionWarningShown = true;
|
|
3596
3596
|
this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);
|
|
3597
3597
|
}
|
|
3598
3598
|
catch {
|
|
@@ -53,6 +53,7 @@ For the full first-run flow, see [Quickstart](quickstart.md).
|
|
|
53
53
|
- [Prompt templates](prompt-templates.md) - reusable prompts that expand from slash commands.
|
|
54
54
|
- [Themes](themes.md) - built-in and custom terminal themes.
|
|
55
55
|
- [Pi packages](packages.md) - bundle and share extensions, skills, prompts, and themes.
|
|
56
|
+
- [MCP servers](mcp.md) - use the pi-mcp-adapter to configure and manage MCP servers.
|
|
56
57
|
- [Custom models](models.md) - add model entries for supported provider APIs.
|
|
57
58
|
- [Custom providers](custom-provider.md) - implement custom APIs and OAuth flows.
|
|
58
59
|
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
# MCP Servers
|
|
2
|
+
|
|
3
|
+
Sling can use the [pi-mcp-adapter](https://github.com/nicobailon/pi-mcp-adapter) to manage Model Context Protocol servers without loading every tool into context up front. The adapter keeps the tool list compact, discovers tools on demand, and supports both shared MCP configs and Sling-specific overrides.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Install](#install)
|
|
8
|
+
- [First Run](#first-run)
|
|
9
|
+
- [Using MCP Servers](#using-mcp-servers)
|
|
10
|
+
- [Adding MCP Servers](#adding-mcp-servers)
|
|
11
|
+
- [Configuration Files](#configuration-files)
|
|
12
|
+
- [OAuth and Auth](#oauth-and-auth)
|
|
13
|
+
- [Direct Tools](#direct-tools)
|
|
14
|
+
- [Importing Existing Configs](#importing-existing-configs)
|
|
15
|
+
- [Troubleshooting](#troubleshooting)
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
Install the adapter as a sling package:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
sling install npm:pi-mcp-adapter
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Restart Sling after installation.
|
|
26
|
+
|
|
27
|
+
## First Run
|
|
28
|
+
|
|
29
|
+
On first run, the adapter looks for standard MCP config files automatically.
|
|
30
|
+
|
|
31
|
+
| You already have... | What happens |
|
|
32
|
+
| -------------------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
33
|
+
| `.mcp.json` or `~/.config/mcp/mcp.json` | Sling uses it immediately. |
|
|
34
|
+
| Host-specific configs such as Cursor, Claude Code, Codex, or VS Code | Run `/mcp setup` to import compatible configs into Sling. |
|
|
35
|
+
| Nothing configured yet | Run `/mcp setup` to scaffold a new config or add a starter server. |
|
|
36
|
+
|
|
37
|
+
If you prefer the terminal, you can also run:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pi-mcp-adapter init
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
That scans for compatible configs and writes the missing Pi adapter files.
|
|
44
|
+
|
|
45
|
+
## Using MCP Servers
|
|
46
|
+
|
|
47
|
+
Once the adapter is installed, Sling exposes a compact MCP proxy tool plus management commands.
|
|
48
|
+
|
|
49
|
+
### In the UI
|
|
50
|
+
|
|
51
|
+
Use `/mcp` to open the MCP panel. From there you can:
|
|
52
|
+
|
|
53
|
+
- view configured servers
|
|
54
|
+
- inspect tool availability
|
|
55
|
+
- reconnect a server
|
|
56
|
+
- toggle direct vs proxy tool registration
|
|
57
|
+
- trigger OAuth for servers that need it
|
|
58
|
+
|
|
59
|
+
Use `/mcp setup` to inspect detected MCP config files, import compatible host configs, and preview any file changes before writing them.
|
|
60
|
+
|
|
61
|
+
### From tools
|
|
62
|
+
|
|
63
|
+
The proxy tool supports search, describe, connect, and tool execution:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
mcp({ search: "screenshot" })
|
|
67
|
+
mcp({ describe: "chrome_devtools_take_screenshot" })
|
|
68
|
+
mcp({ tool: "chrome_devtools_take_screenshot", args: '{"format":"png"}' })
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Note: `args` is a JSON string, not an object.
|
|
72
|
+
|
|
73
|
+
## Command Help
|
|
74
|
+
|
|
75
|
+
### Sling commands
|
|
76
|
+
|
|
77
|
+
| Command | What it does |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| `/mcp` | Open the MCP panel and first-run onboarding surface. |
|
|
80
|
+
| `/mcp setup` | Guided setup for imports, a minimal `.mcp.json`, RepoPrompt quick-add, and config-path inspection. |
|
|
81
|
+
| `/mcp tools` | List all configured tools. |
|
|
82
|
+
| `/mcp reconnect` | Reconnect all servers. |
|
|
83
|
+
| `/mcp reconnect <server>` | Connect or reconnect a single server. |
|
|
84
|
+
| `/mcp logout <server>` | Clear stored OAuth credentials for a server and disconnect it. |
|
|
85
|
+
| `/mcp-auth` | Open an OAuth server picker in interactive UI sessions. |
|
|
86
|
+
| `/mcp-auth <server>` | Run OAuth setup for a specific server. |
|
|
87
|
+
|
|
88
|
+
### In the `/mcp` panel
|
|
89
|
+
|
|
90
|
+
- Press **Enter** on a server that needs auth to start login.
|
|
91
|
+
- Press **Ctrl+A** on any OAuth server to start login.
|
|
92
|
+
- Toggle servers between proxy and direct tools from the panel.
|
|
93
|
+
- Reconnect a server after changing its config.
|
|
94
|
+
|
|
95
|
+
If `settings.autoAuth` is `true`, `mcp({ connect: ... })`, `mcp({ tool: ... })`, and direct tool calls automatically run OAuth when needed and retry once.
|
|
96
|
+
|
|
97
|
+
### Proxy tool actions
|
|
98
|
+
|
|
99
|
+
| Action | What it does |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| `mcp({ })` | Show MCP status and configured servers. |
|
|
102
|
+
| `mcp({ server: "name" })` | List a server's tools and current state. |
|
|
103
|
+
| `mcp({ search: "query" })` | Search cached tools by name or description. |
|
|
104
|
+
| `mcp({ describe: "tool_name" })` | Show a tool's schema and description. |
|
|
105
|
+
| `mcp({ connect: "server-name" })` | Connect to a server before calling its tools. |
|
|
106
|
+
| `mcp({ tool: "tool_name", args: '{"key":"value"}' })` | Call an MCP tool. |
|
|
107
|
+
| `mcp({ action: "auth-start", server: "name" })` | Start OAuth for a remote or headless session. |
|
|
108
|
+
| `mcp({ action: "auth-complete", server: "name", args: '{"redirectUrl":"..."}' })` | Finish OAuth after the browser redirects back. |
|
|
109
|
+
| `mcp({ action: "ui-messages" })` | Read any messages sent from MCP UIs back to Sling. |
|
|
110
|
+
|
|
111
|
+
## Adding MCP Servers
|
|
112
|
+
|
|
113
|
+
### Preferred project config
|
|
114
|
+
|
|
115
|
+
Create or edit `.mcp.json` in your project:
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"mcpServers": {
|
|
120
|
+
"chrome-devtools": {
|
|
121
|
+
"command": "npx",
|
|
122
|
+
"args": ["-y", "chrome-devtools-mcp@latest"]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Preferred user-global config
|
|
129
|
+
|
|
130
|
+
Create or edit `~/.config/mcp/mcp.json` for servers you want available everywhere.
|
|
131
|
+
|
|
132
|
+
### Pi-specific overrides
|
|
133
|
+
|
|
134
|
+
Use Sling-owned files when you need Sling-specific overrides:
|
|
135
|
+
|
|
136
|
+
- `<Sling agent dir>/mcp.json` — global override, usually `~/.sling/agent/mcp.json`
|
|
137
|
+
- `.pi/mcp.json` — project override
|
|
138
|
+
|
|
139
|
+
These files let Sling store adapter-specific settings without modifying shared MCP configs.
|
|
140
|
+
|
|
141
|
+
### Example server definitions
|
|
142
|
+
|
|
143
|
+
#### Stdio transport
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"mcpServers": {
|
|
148
|
+
"github": {
|
|
149
|
+
"command": "npx",
|
|
150
|
+
"args": ["-y", "@modelcontextprotocol/server-github"]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
#### HTTP transport
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"mcpServers": {
|
|
161
|
+
"figma": {
|
|
162
|
+
"url": "http://localhost:3845/mcp"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
#### OAuth-backed server
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{
|
|
172
|
+
"mcpServers": {
|
|
173
|
+
"linear": {
|
|
174
|
+
"url": "https://mcp.linear.app/sse",
|
|
175
|
+
"auth": "oauth"
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### Atlassian Rovo MCP Server for Jira
|
|
182
|
+
|
|
183
|
+
Use this server when you want Sling to talk to Jira through Atlassian's official remote MCP server. The recommended endpoint for most clients is the OAuth endpoint below.
|
|
184
|
+
|
|
185
|
+
```json
|
|
186
|
+
{
|
|
187
|
+
"mcpServers": {
|
|
188
|
+
"atlassian-rovo": {
|
|
189
|
+
"url": "https://mcp.atlassian.com/v1/mcp/authv2",
|
|
190
|
+
"auth": "oauth"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
If your Atlassian admin has enabled API token authentication for headless or service-style usage, you can use the non-OAuth endpoint instead:
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{
|
|
200
|
+
"mcpServers": {
|
|
201
|
+
"atlassian-rovo": {
|
|
202
|
+
"url": "https://mcp.atlassian.com/v1/mcp",
|
|
203
|
+
"auth": "bearer",
|
|
204
|
+
"bearerTokenEnv": "ATLASSIAN_API_TOKEN"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
#### GitLab MCP Server
|
|
211
|
+
|
|
212
|
+
GitLab's MCP server supports HTTP transport directly. Replace `<gitlab.example.com>` with `gitlab.com` for GitLab.com or your self-managed GitLab instance URL.
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"mcpServers": {
|
|
217
|
+
"GitLab": {
|
|
218
|
+
"url": "https://<gitlab.example.com>/api/v4/mcp",
|
|
219
|
+
"auth": "oauth"
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
If your GitLab instance is configured for API token authentication, use bearer auth instead:
|
|
226
|
+
|
|
227
|
+
```json
|
|
228
|
+
{
|
|
229
|
+
"mcpServers": {
|
|
230
|
+
"GitLab": {
|
|
231
|
+
"url": "https://<gitlab.example.com>/api/v4/mcp",
|
|
232
|
+
"auth": "bearer",
|
|
233
|
+
"bearerTokenEnv": "GITLAB_API_TOKEN"
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
To avoid tool-name conflicts when you connect multiple GitLab instances or other MCP servers, add the optional prefix header:
|
|
240
|
+
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"mcpServers": {
|
|
244
|
+
"GitLab": {
|
|
245
|
+
"url": "https://<gitlab.example.com>/api/v4/mcp",
|
|
246
|
+
"auth": "oauth",
|
|
247
|
+
"headers": {
|
|
248
|
+
"X-Gitlab-Mcp-Server-Tool-Name-Prefix": "gitlab_"
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
For stdio setups, wrap the remote server with `mcp-remote`:
|
|
256
|
+
|
|
257
|
+
```json
|
|
258
|
+
{
|
|
259
|
+
"mcpServers": {
|
|
260
|
+
"GitLab": {
|
|
261
|
+
"command": "npx",
|
|
262
|
+
"args": ["mcp-remote", "https://<gitlab.example.com>/api/v4/mcp"]
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Configuration Files
|
|
269
|
+
|
|
270
|
+
Sling reads MCP config in this order:
|
|
271
|
+
|
|
272
|
+
1. `~/.config/mcp/mcp.json`
|
|
273
|
+
2. `~/.sling/agent/mcp.json`
|
|
274
|
+
3. `.mcp.json`
|
|
275
|
+
4. `.pi/mcp.json`
|
|
276
|
+
|
|
277
|
+
Use shared config files for portable setups and Pi-specific files for adapter-only behavior.
|
|
278
|
+
|
|
279
|
+
### Common server options
|
|
280
|
+
|
|
281
|
+
```json
|
|
282
|
+
{
|
|
283
|
+
"mcpServers": {
|
|
284
|
+
"my-server": {
|
|
285
|
+
"command": "npx",
|
|
286
|
+
"args": ["-y", "some-mcp-server"],
|
|
287
|
+
"lifecycle": "lazy",
|
|
288
|
+
"idleTimeout": 10,
|
|
289
|
+
"requestTimeoutMs": 30000,
|
|
290
|
+
"directTools": true
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Common fields:
|
|
297
|
+
|
|
298
|
+
- `command`, `args` — stdio transport
|
|
299
|
+
- `url` — HTTP transport
|
|
300
|
+
- `env`, `cwd`, `headers` — runtime configuration
|
|
301
|
+
- `auth` — `"bearer"` or `"oauth"`
|
|
302
|
+
- `bearerToken` / `bearerTokenEnv` — API token support
|
|
303
|
+
- `lifecycle` — `"lazy"`, `"eager"`, or `"keep-alive"`
|
|
304
|
+
- `idleTimeout` — disconnect after idle time
|
|
305
|
+
- `requestTimeoutMs` — request timeout in milliseconds
|
|
306
|
+
- `directTools` — register tools individually instead of through the proxy
|
|
307
|
+
- `excludeTools` — hide specific tools
|
|
308
|
+
- `debug` — show server stderr
|
|
309
|
+
|
|
310
|
+
## OAuth and Auth
|
|
311
|
+
|
|
312
|
+
For remote or headless OAuth flows:
|
|
313
|
+
|
|
314
|
+
```text
|
|
315
|
+
mcp({ action: "auth-start", server: "linear" })
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Open the returned URL in a browser, then complete the flow in the same Sling session:
|
|
319
|
+
|
|
320
|
+
```text
|
|
321
|
+
mcp({
|
|
322
|
+
action: "auth-complete",
|
|
323
|
+
server: "linear",
|
|
324
|
+
args: '{"redirectUrl":"http://localhost:19876/callback?code=...&state=..."}'
|
|
325
|
+
})
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
You can also pass only the `code` field in `args` when available.
|
|
329
|
+
|
|
330
|
+
Treat authorization URLs and codes as sensitive.
|
|
331
|
+
|
|
332
|
+
## Direct Tools
|
|
333
|
+
|
|
334
|
+
By default, Sling exposes MCP tools through the compact proxy. If you want specific tools in the main tool list, set `directTools`.
|
|
335
|
+
|
|
336
|
+
```json
|
|
337
|
+
{
|
|
338
|
+
"mcpServers": {
|
|
339
|
+
"chrome-devtools": {
|
|
340
|
+
"command": "npx",
|
|
341
|
+
"args": ["-y", "chrome-devtools-mcp@latest"],
|
|
342
|
+
"directTools": true
|
|
343
|
+
},
|
|
344
|
+
"github": {
|
|
345
|
+
"command": "npx",
|
|
346
|
+
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
347
|
+
"directTools": ["search_repositories", "get_file_contents"]
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Use `directTools: true` for small servers. For large servers, prefer the proxy or only expose the tools you actually need.
|
|
354
|
+
|
|
355
|
+
## Importing Existing Configs
|
|
356
|
+
|
|
357
|
+
If you already use MCP in another client, Sling can import the compatible config sources.
|
|
358
|
+
|
|
359
|
+
Supported imports:
|
|
360
|
+
|
|
361
|
+
- `cursor`
|
|
362
|
+
- `claude-code`
|
|
363
|
+
- `claude-desktop`
|
|
364
|
+
- `vscode`
|
|
365
|
+
- `windsurf`
|
|
366
|
+
- `codex`
|
|
367
|
+
|
|
368
|
+
Example:
|
|
369
|
+
|
|
370
|
+
```json
|
|
371
|
+
{
|
|
372
|
+
"imports": ["cursor", "claude-code", "codex"],
|
|
373
|
+
"mcpServers": {}
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## Troubleshooting
|
|
378
|
+
|
|
379
|
+
- Run `/mcp setup` if Sling does not see your servers.
|
|
380
|
+
- Use `/mcp reconnect <server>` after changing a server definition.
|
|
381
|
+
- If a server does not start, check its `command`, `args`, and `cwd`.
|
|
382
|
+
- If OAuth fails on a remote machine, use `auth-start` and `auth-complete`.
|
|
383
|
+
- If a server has too many tools, leave it proxy-only and expose only the high-value tools as direct tools.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@psnext/slingcli",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.20260719-2",
|
|
4
4
|
"description": "Connects Sling CLI to Publicis Sapient Slingshot enterprise LLM gateway. Bundles the pi coding-agent runtime.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"type": "git",
|
|
30
30
|
"url": "git+https://pscode.lioncloud.net/psaiproducts/slingcli.git"
|
|
31
31
|
},
|
|
32
|
-
"slingVersion": "2.5.
|
|
32
|
+
"slingVersion": "2.5.20260719-2",
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@earendil-works/pi-tui": "file:../.sling-pack/earendil-works-pi-tui-0.80.10.tgz",
|
|
35
35
|
"@earendil-works/pi-ai": "file:../.sling-pack/earendil-works-pi-ai-0.80.10.tgz",
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
+
"comment": "List of packages to automatically install on first run. Add more packages to the array as needed.",
|
|
2
3
|
"packages": [
|
|
3
4
|
"npm:pi-intercom",
|
|
4
5
|
"npm:@psnext/s-subagents",
|
|
5
6
|
"npm:pi-ask-user",
|
|
6
7
|
"npm:pi-hermes-memory",
|
|
7
8
|
"npm:pi-smart-fetch",
|
|
8
|
-
"npm:pi-mcp-adapter"
|
|
9
|
+
"npm:pi-mcp-adapter",
|
|
10
|
+
"npm:pine-of-glass"
|
|
9
11
|
],
|
|
10
12
|
"unsupportedPackages": [
|
|
11
|
-
"npm:pi-subagents"
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
"npm:pi-subagents",
|
|
14
|
+
"npm:context-mode"
|
|
15
|
+
]
|
|
14
16
|
}
|