release: ship v1.8.0 with knowledge, recording and settings sync
Some checks failed
ci / 정본·보안·린트·타입·테스트 (push) Successful in 54s
ci / 모바일 린트·타입·Jest (push) Successful in 42s
ci / Supabase Edge Functions + Cloudflare Worker (push) Successful in 22s
ci / .NET API 서버 테스트 (push) Successful in 17s
deploy-site / deploy (push) Successful in 35s
ci / 워크스페이스 빌드 검증 (push) Successful in 37s
release / release-windows (push) Failing after 6m8s
portable-unsigned / portable-windows (push) Failing after 14m8s

Knowledge documents move between desktop, phone and web as source text and
are indexed on each device; desktop recordings upload to the shared storage
and any recording plays from the history card; language, theme, auto-polish
and the active command follow the phone. Document text survives a missing
embedding model so it can be indexed later.

Bumps the product version to 1.8.0 (Android/iOS build 1080000).
This commit is contained in:
Yun Chan 2026-09-27 14:45:19 +09:00
parent 8d6b166de5
commit 3f1fb8eed5
24 changed files with 64 additions and 43 deletions

View file

@ -12,6 +12,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Additional Whisper model management UI - Additional Whisper model management UI
- Plugin system for custom pipelines - Plugin system for custom pipelines
## [1.8.0] - 2026-09-27
> Published from an annotated tag. Installer and update metadata are served by the
> canonical Forgejo feed; no binaries are committed to this repository.
### Added
- **Knowledge base syncs with your phone.** Documents added on the desktop can be
searched on the phone and web, and documents added there appear on the desktop and
are indexed with the local model. Deleting one removes it everywhere.
- **Recordings sync and play anywhere.** Desktop recordings are uploaded (up to 50 MB
each, can be turned off in Settings > Cloud) so the phone can play them, and each
history card has a play button that also plays recordings made on the phone.
- **Shared settings.** Language (Korean/English), light/dark/system theme,
auto-polish on or off and the active command follow the phone.
### Fixed
- A document's text is kept even when the local embedding model is unavailable, so
it can be indexed later without the original file.
## [1.7.0] - 2026-09-27 ## [1.7.0] - 2026-09-27
> Published from an annotated tag. Installer and update metadata are served by the > Published from an annotated tag. Installer and update metadata are served by the

View file

@ -3,7 +3,7 @@
"info": { "info": {
"title": "D3RO-VOICE Admin API", "title": "D3RO-VOICE Admin API",
"description": "Admin CRM Edge Functions for user management, subscription CRUD, payment history, and audit logs.", "description": "Admin CRM Edge Functions for user management, subscription CRUD, payment history, and audit logs.",
"version": "1.7.0" "version": "1.8.0"
}, },
"servers": [ "servers": [
{ {

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/admin", "name": "@d3ro/admin",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice Admin CRM — SaaS 관리 도구", "description": "D3RO Voice Admin CRM — SaaS 관리 도구",
"scripts": { "scripts": {

View file

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net10.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<Version>1.7.0</Version> <Version>1.8.0</Version>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup> </PropertyGroup>

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/desktop", "name": "@d3ro/desktop",
"version": "1.7.0", "version": "1.8.0",
"productName": "d3ro-voice", "productName": "d3ro-voice",
"description": "로컬 AI 음성 어시스턴트 (Electron)", "description": "로컬 AI 음성 어시스턴트 (Electron)",
"main": "./out/main/index.js", "main": "./out/main/index.js",

View file

@ -151,8 +151,8 @@ def versionSettingsValid = configuredVersionName != null &&
configuredVersionName ==~ strictSemver && configuredVersionName ==~ strictSemver &&
configuredVersionCodeValue != null && configuredVersionCodeValue != null &&
configuredVersionCodeValue <= 2100000000L configuredVersionCodeValue <= 2100000000L
def resolvedVersionName = versionSettingsValid ? configuredVersionName : "1.7.0" def resolvedVersionName = versionSettingsValid ? configuredVersionName : "1.8.0"
def resolvedVersionCode = versionSettingsValid ? configuredVersionCodeValue.toInteger() : 1070000 def resolvedVersionCode = versionSettingsValid ? configuredVersionCodeValue.toInteger() : 1080000
def requiredReleaseSettings = [ def requiredReleaseSettings = [
D3RO_RELEASE_STORE_FILE: releaseStoreFilePath, D3RO_RELEASE_STORE_FILE: releaseStoreFilePath,

View file

@ -257,7 +257,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1070000; CURRENT_PROJECT_VERSION = 1080000;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = D3ROVoice/Info.plist; INFOPLIST_FILE = D3ROVoice/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.1; IPHONEOS_DEPLOYMENT_TARGET = 15.1;
@ -265,7 +265,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.7.0; MARKETING_VERSION = 1.8.0;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
@ -287,14 +287,14 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1070000; CURRENT_PROJECT_VERSION = 1080000;
INFOPLIST_FILE = D3ROVoice/Info.plist; INFOPLIST_FILE = D3ROVoice/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.1; IPHONEOS_DEPLOYMENT_TARGET = 15.1;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.7.0; MARKETING_VERSION = 1.8.0;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",

View file

@ -0,0 +1 @@
Knowledge documents and recordings from the desktop app now show up on your phone, and language, theme and auto-polish settings stay in step with the desktop.

View file

@ -0,0 +1 @@
데스크톱 앱에서 추가한 지식 문서와 녹음을 휴대폰에서도 보고 들을 수 있습니다. 언어·테마·자동 다듬기 설정도 데스크톱과 함께 맞춰집니다.

View file

@ -1,12 +1,12 @@
{ {
"name": "@d3ro/mobile-rn", "name": "@d3ro/mobile-rn",
"version": "1.7.0", "version": "1.8.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@d3ro/mobile-rn", "name": "@d3ro/mobile-rn",
"version": "1.7.0", "version": "1.8.0",
"dependencies": { "dependencies": {
"@d3ro/api-client": "file:../../packages/api-client", "@d3ro/api-client": "file:../../packages/api-client",
"@d3ro/core": "file:../../packages/core", "@d3ro/core": "file:../../packages/core",
@ -62,7 +62,7 @@
}, },
"../..": { "../..": {
"name": "d3ro-voice-monorepo", "name": "d3ro-voice-monorepo",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"workspaces": [ "workspaces": [
"apps/desktop", "apps/desktop",
@ -81,7 +81,7 @@
}, },
"../../packages/api-client": { "../../packages/api-client": {
"name": "@d3ro/api-client", "name": "@d3ro/api-client",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@d3ro/core": "*", "@d3ro/core": "*",
@ -98,7 +98,7 @@
}, },
"../../packages/core": { "../../packages/core": {
"name": "@d3ro/core", "name": "@d3ro/core",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"docx": "^9.6.1" "docx": "^9.6.1"
@ -109,7 +109,7 @@
}, },
"../../packages/i18n": { "../../packages/i18n": {
"name": "@d3ro/i18n", "name": "@d3ro/i18n",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/react": "^19.0.0" "@types/react": "^19.0.0"
@ -120,7 +120,7 @@
}, },
"../../packages/ui-native": { "../../packages/ui-native": {
"name": "@d3ro/ui-native", "name": "@d3ro/ui-native",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/react": "*" "@types/react": "*"

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/mobile-rn", "name": "@d3ro/mobile-rn",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"scripts": { "scripts": {
"android": "react-native run-android", "android": "react-native run-android",

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/web", "name": "@d3ro/web",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice 웹 앱 — Next.js 기반 SaaS 인터페이스", "description": "D3RO Voice 웹 앱 — Next.js 기반 SaaS 인터페이스",
"scripts": { "scripts": {

View file

@ -139,7 +139,7 @@ export function Sidebar(): React.ReactElement {
</PhosphorText> </PhosphorText>
</Box> </Box>
<Box sx={{ fontSize: '10px', fontFamily: 'ui-monospace, monospace', color: d3roPalette.text.muted }}> <Box sx={{ fontSize: '10px', fontFamily: 'ui-monospace, monospace', color: d3roPalette.text.muted }}>
v1.7.0 v1.8.0
</Box> </Box>
</Box> </Box>

20
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "d3ro-voice-monorepo", "name": "d3ro-voice-monorepo",
"version": "1.7.0", "version": "1.8.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "d3ro-voice-monorepo", "name": "d3ro-voice-monorepo",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"workspaces": [ "workspaces": [
"apps/desktop", "apps/desktop",
@ -25,7 +25,7 @@
}, },
"apps/admin": { "apps/admin": {
"name": "@d3ro/admin", "name": "@d3ro/admin",
"version": "1.7.0", "version": "1.8.0",
"dependencies": { "dependencies": {
"@d3ro/api-client": "*", "@d3ro/api-client": "*",
"@d3ro/core": "*", "@d3ro/core": "*",
@ -109,7 +109,7 @@
}, },
"apps/desktop": { "apps/desktop": {
"name": "@d3ro/desktop", "name": "@d3ro/desktop",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@d3ro/core": "*", "@d3ro/core": "*",
@ -161,7 +161,7 @@
}, },
"apps/web": { "apps/web": {
"name": "@d3ro/web", "name": "@d3ro/web",
"version": "1.7.0", "version": "1.8.0",
"dependencies": { "dependencies": {
"@d3ro/api-client": "*", "@d3ro/api-client": "*",
"@d3ro/core": "*", "@d3ro/core": "*",
@ -17216,7 +17216,7 @@
}, },
"packages/api-client": { "packages/api-client": {
"name": "@d3ro/api-client", "name": "@d3ro/api-client",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@d3ro/core": "*", "@d3ro/core": "*",
@ -17233,7 +17233,7 @@
}, },
"packages/core": { "packages/core": {
"name": "@d3ro/core", "name": "@d3ro/core",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"docx": "^9.6.1" "docx": "^9.6.1"
@ -17244,7 +17244,7 @@
}, },
"packages/i18n": { "packages/i18n": {
"name": "@d3ro/i18n", "name": "@d3ro/i18n",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/react": "^19.0.0" "@types/react": "^19.0.0"
@ -17255,7 +17255,7 @@
}, },
"packages/ui": { "packages/ui": {
"name": "@d3ro/ui", "name": "@d3ro/ui",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@d3ro/core": "*" "@d3ro/core": "*"
@ -17275,7 +17275,7 @@
}, },
"packages/ui-native": { "packages/ui-native": {
"name": "@d3ro/ui-native", "name": "@d3ro/ui-native",
"version": "1.7.0", "version": "1.8.0",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/react": "*" "@types/react": "*"

View file

@ -1,6 +1,6 @@
{ {
"name": "d3ro-voice-monorepo", "name": "d3ro-voice-monorepo",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice — 멀티플랫폼 AI 음성 어시스턴트 (Monorepo)", "description": "D3RO Voice — 멀티플랫폼 AI 음성 어시스턴트 (Monorepo)",
"author": "D3RO", "author": "D3RO",

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/api-client", "name": "@d3ro/api-client",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice API 클라이언트 — Supabase 래퍼 (web/desktop/mobile 공유)", "description": "D3RO Voice API 클라이언트 — Supabase 래퍼 (web/desktop/mobile 공유)",
"license": "MIT", "license": "MIT",

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/core", "name": "@d3ro/core",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice 공유 비즈니스 로직 — 타입, 에러, IPC 채널, 상수, 유틸", "description": "D3RO Voice 공유 비즈니스 로직 — 타입, 에러, IPC 채널, 상수, 유틸",
"license": "MIT", "license": "MIT",

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/i18n", "name": "@d3ro/i18n",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice 공유 i18n — 12개 locale, 타입 안전 키, Context, 포맷 유틸", "description": "D3RO Voice 공유 i18n — 12개 locale, 타입 안전 키, Context, 포맷 유틸",
"license": "MIT", "license": "MIT",

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/ui-native", "name": "@d3ro/ui-native",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice React Native DS — MetalCard/PhosphorText/Led/WaveBars etc.", "description": "D3RO Voice React Native DS — MetalCard/PhosphorText/Led/WaveBars etc.",
"license": "MIT", "license": "MIT",

View file

@ -1,6 +1,6 @@
{ {
"name": "@d3ro/ui", "name": "@d3ro/ui",
"version": "1.7.0", "version": "1.8.0",
"private": true, "private": true,
"description": "D3RO Voice 공유 UI — 디자인 시스템 컴포넌트 + 테마 토큰 + CSS 변수 맵", "description": "D3RO Voice 공유 UI — 디자인 시스템 컴포넌트 + 테마 토큰 + CSS 변수 맵",
"license": "MIT", "license": "MIT",

View file

@ -1,8 +1,8 @@
{ {
"schemaVersion": 1, "schemaVersion": 1,
"version": "1.7.0", "version": "1.8.0",
"androidVersionCode": 1070000, "androidVersionCode": 1080000,
"iosBuildNumber": 1070000, "iosBuildNumber": 1080000,
"releaseDate": "2026-09-27", "releaseDate": "2026-09-27",
"desktopLicensePublicKeyId": "5c52b765135ee2531c681b53cd4dc0e96fff8737f496c0b04ba8334fc81a887f" "desktopLicensePublicKeyId": "5c52b765135ee2531c681b53cd4dc0e96fff8737f496c0b04ba8334fc81a887f"
} }

View file

@ -1,12 +1,12 @@
{ {
"name": "d3ro-voice-site", "name": "d3ro-voice-site",
"version": "1.7.0", "version": "1.8.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "d3ro-voice-site", "name": "d3ro-voice-site",
"version": "1.7.0", "version": "1.8.0",
"dependencies": { "dependencies": {
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0" "react-dom": "^19.0.0"

View file

@ -1,7 +1,7 @@
{ {
"name": "d3ro-voice-site", "name": "d3ro-voice-site",
"private": true, "private": true,
"version": "1.7.0", "version": "1.8.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite --port 5199 --host", "dev": "vite --port 5199 --host",

View file

@ -5,7 +5,7 @@
// NAS 배포는 바이너리를 포함하지 않으므로 `/releases/...` 같은 로컬 경로는 // NAS 배포는 바이너리를 포함하지 않으므로 `/releases/...` 같은 로컬 경로는
// 실제 배포 환경에서 404가 된다. // 실제 배포 환경에서 404가 된다.
export const DESKTOP_VERSION = '1.7.0' export const DESKTOP_VERSION = '1.8.0'
/** 릴리스 게시일. `release/product-version.json`의 releaseDate와 같아야 한다. */ /** 릴리스 게시일. `release/product-version.json`의 releaseDate와 같아야 한다. */
export const DESKTOP_RELEASE_DATE = '2026-09-27' export const DESKTOP_RELEASE_DATE = '2026-09-27'