- Assist/Agent 模式新增朗读开关 + NSSpeechSynthesizer 语音合成 - 朗读完成后弹窗延迟5秒带动画关闭(不再写死15/20秒) - 打字模式下不自动关闭弹窗 - 二次输入时取消旧朗读/旧延迟关闭,避免竞争问题 - Agent 进度计时器第二次输入时正确归零 - DMG 打包自动清空 models.json API Key - Node.js 运行时打包进 Agent/bin/,用户无需安装 - Agent system prompt 更新为 VoiceInput 身份 + 语音容错说明 - AGENTS.md 全面更新,补全 Agent 模式文档
51 lines
1.6 KiB
Bash
Executable File
51 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# create_app_bundle.sh - 将 SPM 构建产物打包为 .app bundle
|
||
# Usage: ./scripts/create_app_bundle.sh [debug|release]
|
||
|
||
set -e
|
||
|
||
BUILD_MODE="${1:-debug}"
|
||
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||
BUILD_DIR="$PROJECT_DIR/.build"
|
||
BUNDLE_DIR="$BUILD_DIR/$BUILD_MODE/VoiceInput.app"
|
||
EXEC_SRC="$BUILD_DIR/$BUILD_MODE/VoiceInput"
|
||
CONTENTS_DIR="$BUNDLE_DIR/Contents"
|
||
MACOS_DIR="$CONTENTS_DIR/MacOS"
|
||
RESOURCES_DIR="$CONTENTS_DIR/Resources"
|
||
|
||
echo "📦 Creating app bundle at $BUNDLE_DIR..."
|
||
|
||
# 清空并创建目录结构
|
||
rm -rf "$BUNDLE_DIR"
|
||
mkdir -p "$MACOS_DIR"
|
||
mkdir -p "$RESOURCES_DIR"
|
||
|
||
# 复制可执行文件
|
||
cp "$EXEC_SRC" "$MACOS_DIR/VoiceInput"
|
||
chmod +x "$MACOS_DIR/VoiceInput"
|
||
|
||
# 复制 Info.plist 和图标
|
||
cp "$PROJECT_DIR/Sources/Resources/Info.plist" "$CONTENTS_DIR/Info.plist"
|
||
if [ -f "$PROJECT_DIR/Sources/Resources/AppIcon.icns" ]; then
|
||
cp "$PROJECT_DIR/Sources/Resources/AppIcon.icns" "$RESOURCES_DIR/AppIcon.icns"
|
||
fi
|
||
|
||
# 复制 Agent 目录(智能体配置、运行时、Node.js)
|
||
if [ -d "$PROJECT_DIR/Agent" ]; then
|
||
mkdir -p "$RESOURCES_DIR/Agent"
|
||
cp -R "$PROJECT_DIR/Agent/"* "$RESOURCES_DIR/Agent/"
|
||
echo " ✅ Agent directory copied"
|
||
if [ -f "$RESOURCES_DIR/Agent/bin/node" ]; then
|
||
chmod +x "$RESOURCES_DIR/Agent/bin/node"
|
||
echo " ✅ Node.js bundled"
|
||
fi
|
||
fi
|
||
|
||
# 更新 Info.plist 引用图标
|
||
/usr/libexec/PlistBuddy -c "Add :CFBundleIconFile string AppIcon" "$CONTENTS_DIR/Info.plist" 2>/dev/null || true
|
||
|
||
# 创建 PkgInfo
|
||
echo -n 'APPL????' > "$CONTENTS_DIR/PkgInfo"
|
||
|
||
echo "✅ App bundle created: $BUNDLE_DIR"
|