Merge branch 'main' of ssh://git.shumengya.top:8022/shumengya/sproutclaw
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
- 如果用户需要你生成总结文档,教程时,除非用户强制要求,否则默认储存目录为smallmengya的/shumengya/docs 目录下
|
||||
|
||||
## 服务器运维规范
|
||||
- `smallmengya`(本机)作为开发环境、测试环境和 LXC 容器宿主机
|
||||
- `smallmengya`作为开发环境、测试环境和 LXC 容器宿主机
|
||||
- `bigmengya`(通过 SSH 连接)作为 Docker 容器机
|
||||
- `alycd`(通过 SSH 连接)作为内网对外开放的服务器
|
||||
|
||||
|
||||
@@ -73,8 +73,11 @@ function renderSproutclawLogo(theme: any, width: number): string[] {
|
||||
if (width < 96) {
|
||||
return [
|
||||
[
|
||||
rgb("❯ ", [100, 200, 255]),
|
||||
theme.bold(gradientText("SproutClaw")),
|
||||
theme.fg("dim", ` v${VERSION}`),
|
||||
rgb(` v${VERSION}`, [170, 235, 255]),
|
||||
rgb(" · ", [80, 100, 130]),
|
||||
rgb("萌芽运维开发助手", [190, 170, 255]),
|
||||
].join(""),
|
||||
];
|
||||
}
|
||||
@@ -134,16 +137,13 @@ export default function (pi: ExtensionAPI) {
|
||||
divider,
|
||||
...renderSproutclawLogo(theme, width),
|
||||
divider,
|
||||
rgb("萌芽运维开发 Agent 助手", [170, 235, 255]),
|
||||
"",
|
||||
rgb("萌芽运维开发Agent助手", [170, 235, 255]),
|
||||
];
|
||||
if (expanded) {
|
||||
lines.push(expandedInstructions);
|
||||
lines.push("");
|
||||
lines.push(onboarding);
|
||||
} else {
|
||||
lines.push(compactOnboarding);
|
||||
lines.push("");
|
||||
lines.push(onboarding);
|
||||
}
|
||||
return lines;
|
||||
|
||||
@@ -4746,6 +4746,42 @@ export const MODELS = {
|
||||
contextWindow: 262144,
|
||||
maxTokens: 32768,
|
||||
} satisfies Model<"google-generative-ai">,
|
||||
"gemma-4-E2B-it": {
|
||||
id: "gemma-4-E2B-it",
|
||||
name: "Gemma 4 E2B IT",
|
||||
api: "google-generative-ai",
|
||||
provider: "google",
|
||||
baseUrl: "https://generativelanguage.googleapis.com/v1beta",
|
||||
reasoning: true,
|
||||
thinkingLevelMap: {"off":null,"minimal":"MINIMAL","low":null,"medium":null,"high":"HIGH"},
|
||||
input: ["text", "image"],
|
||||
cost: {
|
||||
input: 0,
|
||||
output: 0,
|
||||
cacheRead: 0,
|
||||
cacheWrite: 0,
|
||||
},
|
||||
contextWindow: 131072,
|
||||
maxTokens: 8192,
|
||||
} satisfies Model<"google-generative-ai">,
|
||||
"gemma-4-E4B-it": {
|
||||
id: "gemma-4-E4B-it",
|
||||
name: "Gemma 4 E4B IT",
|
||||
api: "google-generative-ai",
|
||||
provider: "google",
|
||||
baseUrl: "https://generativelanguage.googleapis.com/v1beta",
|
||||
reasoning: true,
|
||||
thinkingLevelMap: {"off":null,"minimal":"MINIMAL","low":null,"medium":null,"high":"HIGH"},
|
||||
input: ["text", "image"],
|
||||
cost: {
|
||||
input: 0,
|
||||
output: 0,
|
||||
cacheRead: 0,
|
||||
cacheWrite: 0,
|
||||
},
|
||||
contextWindow: 131072,
|
||||
maxTokens: 8192,
|
||||
} satisfies Model<"google-generative-ai">,
|
||||
},
|
||||
"google-vertex": {
|
||||
"gemini-1.5-flash": {
|
||||
@@ -12830,6 +12866,25 @@ export const MODELS = {
|
||||
contextWindow: 262144,
|
||||
maxTokens: 131000,
|
||||
} satisfies Model<"openai-completions">,
|
||||
"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",
|
||||
compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsStrictMode":false,"supportsLongCacheRetention":false,"thinkingFormat":"together"},
|
||||
reasoning: true,
|
||||
thinkingLevelMap: {"minimal":null,"low":null,"medium":null},
|
||||
input: ["text"],
|
||||
cost: {
|
||||
input: 0.95,
|
||||
output: 4,
|
||||
cacheRead: 0.19,
|
||||
cacheWrite: 0,
|
||||
},
|
||||
contextWindow: 262144,
|
||||
maxTokens: 131072,
|
||||
} satisfies Model<"openai-completions">,
|
||||
"nvidia/nemotron-3-ultra-550b-a55b": {
|
||||
id: "nvidia/nemotron-3-ultra-550b-a55b",
|
||||
name: "Nemotron 3 Ultra 550B A55B",
|
||||
|
||||
@@ -1422,19 +1422,30 @@ export class InteractiveMode {
|
||||
};
|
||||
const { local, packages } = this.splitExtensionsByOrigin(extensions);
|
||||
|
||||
const allExtensionLabels = [
|
||||
...this.getCompactExtensionLabels(local),
|
||||
...this.getCompactExtensionLabels(packages),
|
||||
];
|
||||
const pluginCompactList = formatCompactGrid(allExtensionLabels);
|
||||
|
||||
const expandedParts: string[] = [];
|
||||
if (local.length > 0) {
|
||||
const localGroups = this.buildScopeGroups(local);
|
||||
const localList = this.formatScopeGroups(localGroups, extensionFormatOptions);
|
||||
const localCompactList = formatCompactGrid(this.getCompactExtensionLabels(local));
|
||||
addLoadedSection("本地扩展", localCompactList, localList, "mdHeading", local.length);
|
||||
expandedParts.push(
|
||||
`${theme.fg("mdHeading", " 本地扩展")} ${theme.fg("muted", String(local.length))}\n${localList}`,
|
||||
);
|
||||
}
|
||||
|
||||
if (packages.length > 0) {
|
||||
const packageGroups = this.buildScopeGroups(packages);
|
||||
const packageList = this.formatScopeGroups(packageGroups, extensionFormatOptions);
|
||||
const packageCompactList = formatCompactGrid(this.getCompactExtensionLabels(packages));
|
||||
addLoadedSection("npm 扩展", packageCompactList, packageList, "mdHeading", packages.length);
|
||||
expandedParts.push(
|
||||
`${theme.fg("mdHeading", " npm 扩展")} ${theme.fg("muted", String(packages.length))}\n${packageList}`,
|
||||
);
|
||||
}
|
||||
const pluginExpandedList = expandedParts.join("\n");
|
||||
|
||||
addLoadedSection("插件", pluginCompactList, pluginExpandedList, "mdHeading", extensions.length);
|
||||
}
|
||||
|
||||
// Show loaded themes (excluding built-in)
|
||||
@@ -1459,6 +1470,20 @@ export class InteractiveMode {
|
||||
);
|
||||
addLoadedSection("Themes", themeCompactList, themeList, "mdHeading", customThemes.length);
|
||||
}
|
||||
|
||||
const allTools = this.session.getAllTools();
|
||||
if (allTools.length > 0) {
|
||||
const activeToolNames = new Set(this.session.getActiveToolNames());
|
||||
const toolCompactList = formatCompactGrid(allTools.map((t) => t.name));
|
||||
const toolList = allTools
|
||||
.map((t) => {
|
||||
const active = activeToolNames.has(t.name);
|
||||
const marker = active ? " " : theme.fg("dim", "✗ ");
|
||||
return `${marker}${theme.fg("dim", t.name)}${t.description ? theme.fg("dim", ` ${t.description.split("\n")[0].slice(0, 60)}`) : ""}`;
|
||||
})
|
||||
.join("\n");
|
||||
addLoadedSection("工具", toolCompactList, toolList, "mdHeading", allTools.length);
|
||||
}
|
||||
}
|
||||
|
||||
if (showDiagnostics) {
|
||||
|
||||
@@ -1,15 +1,36 @@
|
||||
@echo off
|
||||
setlocal
|
||||
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
if "%SCRIPT_DIR:~-1%"=="\" set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
|
||||
set "PI_CODING_AGENT_DIR=%SCRIPT_DIR%\.pi\agent"
|
||||
set "PI_CLI_DIST=%SCRIPT_DIR%\packages\coding-agent\dist\cli.js"
|
||||
|
||||
if not exist "%PI_CLI_DIST%" (
|
||||
echo Build output not found: %PI_CLI_DIST% >&2
|
||||
echo Run from repo root: npm run build >&2
|
||||
exit /b 1
|
||||
if "%SCRIPT_DIR:~-1%"=="" set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
|
||||
if not defined PI_CODING_AGENT_DIR (
|
||||
set "PI_CODING_AGENT_DIR=%SCRIPT_DIR%.piagent"
|
||||
)
|
||||
|
||||
node "%PI_CLI_DIST%" %*
|
||||
if "%~1"=="" goto run
|
||||
if /I "%~1"=="run" (
|
||||
shift
|
||||
goto run
|
||||
)
|
||||
if /I "%~1"=="build" (
|
||||
shift
|
||||
npm run build %*
|
||||
exit /b %ERRORLEVEL%
|
||||
)
|
||||
if /I "%~1"=="help" goto help
|
||||
if "%~1"=="-h" goto help
|
||||
if "%~1"=="--help" goto help
|
||||
|
||||
:run
|
||||
call "%SCRIPT_DIR%pi-built.bat" %*
|
||||
exit /b %ERRORLEVEL%
|
||||
|
||||
:help
|
||||
echo sproutclaw - SproutClaw pi 构建版启动器
|
||||
echo.
|
||||
echo 用法:
|
||||
echo sproutclaw 启动 pi(构建版)
|
||||
echo sproutclaw run [args] 同 sproutclaw
|
||||
echo sproutclaw build 从源码构建所有包
|
||||
echo.
|
||||
echo 其余参数透传给 pi,例如: sproutclaw --version
|
||||
exit /b 0
|
||||
|
||||
Reference in New Issue
Block a user