From 3d9faedf7de257bc01703c4d95a263878a91b65c Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Sun, 27 Sep 2026 14:08:18 +0900 Subject: [PATCH] release: ship v1.7.0 with two-way cloud sync and streaming captions Signing in now keeps history, dictionary, meetings with memos and documents, memo tags, user commands and templates the same on desktop, phone and web, with offline changes queued, deletions shared and phone edits arriving live. The desktop registers in the phone's device list and signs out when disconnected there; local-mode records move into the first account. Live captions stream about a second behind speech, finish lines on pauses, are polished in context by the local model and can use their own speech model (the speech engine is downloaded again once, minimum 1.7.0). Fixes suggestion paste on Ctrl+Alt+Enter, click acceptance, typing detection in growing chat boxes, one-way cloud sync and failing account exports. Bumps the product version to 1.7.0 (Android/iOS build 1070000). --- CHANGELOG.md | 33 +++++++++++++++---- apps/admin-swagger/openapi.json | 2 +- apps/admin/package.json | 2 +- apps/api-server/D3ROVoice.Api.csproj | 2 +- apps/desktop/package.json | 2 +- apps/mobile-rn/android/app/build.gradle | 4 +-- .../ios/D3ROVoice.xcodeproj/project.pbxproj | 8 ++--- .../android/en-US/changelogs/1070000.txt | 1 + .../android/ko-KR/changelogs/1070000.txt | 1 + apps/mobile-rn/package-lock.json | 14 ++++---- apps/mobile-rn/package.json | 2 +- apps/web/package.json | 2 +- apps/web/src/components/layout/sidebar.tsx | 2 +- package-lock.json | 20 +++++------ package.json | 2 +- packages/api-client/package.json | 2 +- packages/core/package.json | 2 +- packages/i18n/package.json | 2 +- packages/ui-native/package.json | 2 +- packages/ui/package.json | 2 +- release/product-version.json | 8 ++--- site/package-lock.json | 4 +-- site/package.json | 2 +- site/src/release.ts | 4 +-- 24 files changed, 74 insertions(+), 51 deletions(-) create mode 100644 apps/mobile-rn/metadata/android/en-US/changelogs/1070000.txt create mode 100644 apps/mobile-rn/metadata/android/ko-KR/changelogs/1070000.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index ea004a4..8aeefe2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Planned +- macOS / Linux support +- Additional Whisper model management UI +- Plugin system for custom pipelines + +## [1.7.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 +- **Your desktop and phone now stay in step.** Signing in keeps history (with titles + and favorites), the dictionary, meetings with their memos and documents, memo tags, + your own commands and dictation/meeting templates the same on the desktop, the phone + and the web. Changes made offline wait and upload later; what you delete on one + device is deleted on the others; edits from the phone appear within seconds. +- **The desktop appears in the phone's device list.** Disconnecting it from the phone + signs the desktop out; signing out on the desktop removes it from the list. +- **Records made before signing in come with you.** The first account that signs in + on this computer receives the history, dictionary and meetings kept in local mode. +- **Favorites on the desktop**, shared with the phone. +- Settings > Cloud shows how many changes are waiting to upload or were refused. - **Live captions stream as you listen.** Words appear about a second after they are spoken and keep updating while the sentence is in progress; the part that is no longer changing is shown solid and the rest dimmed. A pause finishes the line, and @@ -38,12 +59,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 was taken for a different field on every keystroke, which kept blocking suggestions as "not typing". Fields are now told apart by window and control, and a mouse click re-checks whether you have typed since. - -### Planned -- macOS / Linux support -- Additional Whisper model management UI -- Cloud-optional backup (encrypted, opt-in) -- Plugin system for custom pipelines +- **Cloud sync was mostly one-way.** Data created on the phone never reached the + desktop after signing in, only the first meeting's memos and documents were + uploaded, deletions were never shared, team meetings leaked into personal data, and + live updates never connected. All fixed. +- Exporting account data failed for accounts with meetings; the export keeps its + original format again. ## [1.6.0] - 2026-09-24 diff --git a/apps/admin-swagger/openapi.json b/apps/admin-swagger/openapi.json index 286c0ac..c680a48 100644 --- a/apps/admin-swagger/openapi.json +++ b/apps/admin-swagger/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "D3RO-VOICE Admin API", "description": "Admin CRM Edge Functions for user management, subscription CRUD, payment history, and audit logs.", - "version": "1.6.0" + "version": "1.7.0" }, "servers": [ { diff --git a/apps/admin/package.json b/apps/admin/package.json index 72fb84f..c5f3978 100644 --- a/apps/admin/package.json +++ b/apps/admin/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/admin", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice Admin CRM — SaaS 관리 도구", "scripts": { diff --git a/apps/api-server/D3ROVoice.Api.csproj b/apps/api-server/D3ROVoice.Api.csproj index c248e17..bdcb77d 100644 --- a/apps/api-server/D3ROVoice.Api.csproj +++ b/apps/api-server/D3ROVoice.Api.csproj @@ -2,7 +2,7 @@ net10.0 - 1.6.0 + 1.7.0 enable enable diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 9df0179..4effa31 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/desktop", - "version": "1.6.0", + "version": "1.7.0", "productName": "d3ro-voice", "description": "로컬 AI 음성 어시스턴트 (Electron)", "main": "./out/main/index.js", diff --git a/apps/mobile-rn/android/app/build.gradle b/apps/mobile-rn/android/app/build.gradle index 4273262..1d626f2 100644 --- a/apps/mobile-rn/android/app/build.gradle +++ b/apps/mobile-rn/android/app/build.gradle @@ -151,8 +151,8 @@ def versionSettingsValid = configuredVersionName != null && configuredVersionName ==~ strictSemver && configuredVersionCodeValue != null && configuredVersionCodeValue <= 2100000000L -def resolvedVersionName = versionSettingsValid ? configuredVersionName : "1.6.0" -def resolvedVersionCode = versionSettingsValid ? configuredVersionCodeValue.toInteger() : 1060000 +def resolvedVersionName = versionSettingsValid ? configuredVersionName : "1.7.0" +def resolvedVersionCode = versionSettingsValid ? configuredVersionCodeValue.toInteger() : 1070000 def requiredReleaseSettings = [ D3RO_RELEASE_STORE_FILE: releaseStoreFilePath, diff --git a/apps/mobile-rn/ios/D3ROVoice.xcodeproj/project.pbxproj b/apps/mobile-rn/ios/D3ROVoice.xcodeproj/project.pbxproj index deacf95..f42b444 100644 --- a/apps/mobile-rn/ios/D3ROVoice.xcodeproj/project.pbxproj +++ b/apps/mobile-rn/ios/D3ROVoice.xcodeproj/project.pbxproj @@ -257,7 +257,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1060000; + CURRENT_PROJECT_VERSION = 1070000; ENABLE_BITCODE = NO; INFOPLIST_FILE = D3ROVoice/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; @@ -265,7 +265,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.6.0; + MARKETING_VERSION = 1.7.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -287,14 +287,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1060000; + CURRENT_PROJECT_VERSION = 1070000; INFOPLIST_FILE = D3ROVoice/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.6.0; + MARKETING_VERSION = 1.7.0; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", diff --git a/apps/mobile-rn/metadata/android/en-US/changelogs/1070000.txt b/apps/mobile-rn/metadata/android/en-US/changelogs/1070000.txt new file mode 100644 index 0000000..a9f987a --- /dev/null +++ b/apps/mobile-rn/metadata/android/en-US/changelogs/1070000.txt @@ -0,0 +1 @@ +Syncing with the desktop app is fixed. The device list now shows the desktop app and lets you disconnect it. Exporting your data no longer fails for accounts with meetings. diff --git a/apps/mobile-rn/metadata/android/ko-KR/changelogs/1070000.txt b/apps/mobile-rn/metadata/android/ko-KR/changelogs/1070000.txt new file mode 100644 index 0000000..8606db5 --- /dev/null +++ b/apps/mobile-rn/metadata/android/ko-KR/changelogs/1070000.txt @@ -0,0 +1 @@ +데스크톱 앱과의 동기화를 고쳤습니다. 연결된 기기 목록에 데스크톱 앱이 함께 표시되고, 여기서 연결을 해제할 수 있습니다. 데이터 내보내기가 회의가 있는 계정에서 실패하던 문제도 수정했습니다. diff --git a/apps/mobile-rn/package-lock.json b/apps/mobile-rn/package-lock.json index b1d22e1..cc1b214 100644 --- a/apps/mobile-rn/package-lock.json +++ b/apps/mobile-rn/package-lock.json @@ -1,12 +1,12 @@ { "name": "@d3ro/mobile-rn", - "version": "1.6.0", + "version": "1.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@d3ro/mobile-rn", - "version": "1.6.0", + "version": "1.7.0", "dependencies": { "@d3ro/api-client": "file:../../packages/api-client", "@d3ro/core": "file:../../packages/core", @@ -62,7 +62,7 @@ }, "../..": { "name": "d3ro-voice-monorepo", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "workspaces": [ "apps/desktop", @@ -81,7 +81,7 @@ }, "../../packages/api-client": { "name": "@d3ro/api-client", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "dependencies": { "@d3ro/core": "*", @@ -98,7 +98,7 @@ }, "../../packages/core": { "name": "@d3ro/core", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "dependencies": { "docx": "^9.6.1" @@ -109,7 +109,7 @@ }, "../../packages/i18n": { "name": "@d3ro/i18n", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "devDependencies": { "@types/react": "^19.0.0" @@ -120,7 +120,7 @@ }, "../../packages/ui-native": { "name": "@d3ro/ui-native", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "devDependencies": { "@types/react": "*" diff --git a/apps/mobile-rn/package.json b/apps/mobile-rn/package.json index 9cfe444..a6bb16a 100644 --- a/apps/mobile-rn/package.json +++ b/apps/mobile-rn/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/mobile-rn", - "version": "1.6.0", + "version": "1.7.0", "private": true, "scripts": { "android": "react-native run-android", diff --git a/apps/web/package.json b/apps/web/package.json index 4f7b2b1..5ad5430 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/web", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice 웹 앱 — Next.js 기반 SaaS 인터페이스", "scripts": { diff --git a/apps/web/src/components/layout/sidebar.tsx b/apps/web/src/components/layout/sidebar.tsx index f1d9376..c4e5876 100644 --- a/apps/web/src/components/layout/sidebar.tsx +++ b/apps/web/src/components/layout/sidebar.tsx @@ -139,7 +139,7 @@ export function Sidebar(): React.ReactElement { - v1.6.0 + v1.7.0 diff --git a/package-lock.json b/package-lock.json index 2076eb9..a1956e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "d3ro-voice-monorepo", - "version": "1.6.0", + "version": "1.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "d3ro-voice-monorepo", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "workspaces": [ "apps/desktop", @@ -25,7 +25,7 @@ }, "apps/admin": { "name": "@d3ro/admin", - "version": "1.6.0", + "version": "1.7.0", "dependencies": { "@d3ro/api-client": "*", "@d3ro/core": "*", @@ -109,7 +109,7 @@ }, "apps/desktop": { "name": "@d3ro/desktop", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "dependencies": { "@d3ro/core": "*", @@ -161,7 +161,7 @@ }, "apps/web": { "name": "@d3ro/web", - "version": "1.6.0", + "version": "1.7.0", "dependencies": { "@d3ro/api-client": "*", "@d3ro/core": "*", @@ -17216,7 +17216,7 @@ }, "packages/api-client": { "name": "@d3ro/api-client", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "dependencies": { "@d3ro/core": "*", @@ -17233,7 +17233,7 @@ }, "packages/core": { "name": "@d3ro/core", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "dependencies": { "docx": "^9.6.1" @@ -17244,7 +17244,7 @@ }, "packages/i18n": { "name": "@d3ro/i18n", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "devDependencies": { "@types/react": "^19.0.0" @@ -17255,7 +17255,7 @@ }, "packages/ui": { "name": "@d3ro/ui", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "dependencies": { "@d3ro/core": "*" @@ -17275,7 +17275,7 @@ }, "packages/ui-native": { "name": "@d3ro/ui-native", - "version": "1.6.0", + "version": "1.7.0", "license": "MIT", "devDependencies": { "@types/react": "*" diff --git a/package.json b/package.json index 836644d..9478310 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "d3ro-voice-monorepo", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice — 멀티플랫폼 AI 음성 어시스턴트 (Monorepo)", "author": "D3RO", diff --git a/packages/api-client/package.json b/packages/api-client/package.json index a5d24b5..10736f7 100644 --- a/packages/api-client/package.json +++ b/packages/api-client/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/api-client", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice API 클라이언트 — Supabase 래퍼 (web/desktop/mobile 공유)", "license": "MIT", diff --git a/packages/core/package.json b/packages/core/package.json index 5ab14ff..abd990e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/core", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice 공유 비즈니스 로직 — 타입, 에러, IPC 채널, 상수, 유틸", "license": "MIT", diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 66610d0..556f3e7 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/i18n", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice 공유 i18n — 12개 locale, 타입 안전 키, Context, 포맷 유틸", "license": "MIT", diff --git a/packages/ui-native/package.json b/packages/ui-native/package.json index e4fc79b..7a9873f 100644 --- a/packages/ui-native/package.json +++ b/packages/ui-native/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/ui-native", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice React Native DS — MetalCard/PhosphorText/Led/WaveBars etc.", "license": "MIT", diff --git a/packages/ui/package.json b/packages/ui/package.json index f8aa3dd..9738e8a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@d3ro/ui", - "version": "1.6.0", + "version": "1.7.0", "private": true, "description": "D3RO Voice 공유 UI — 디자인 시스템 컴포넌트 + 테마 토큰 + CSS 변수 맵", "license": "MIT", diff --git a/release/product-version.json b/release/product-version.json index 5e29973..fdc5696 100644 --- a/release/product-version.json +++ b/release/product-version.json @@ -1,8 +1,8 @@ { "schemaVersion": 1, - "version": "1.6.0", - "androidVersionCode": 1060000, - "iosBuildNumber": 1060000, - "releaseDate": "2026-09-24", + "version": "1.7.0", + "androidVersionCode": 1070000, + "iosBuildNumber": 1070000, + "releaseDate": "2026-09-27", "desktopLicensePublicKeyId": "5c52b765135ee2531c681b53cd4dc0e96fff8737f496c0b04ba8334fc81a887f" } diff --git a/site/package-lock.json b/site/package-lock.json index c77c387..102ac78 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1,12 +1,12 @@ { "name": "d3ro-voice-site", - "version": "1.6.0", + "version": "1.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "d3ro-voice-site", - "version": "1.6.0", + "version": "1.7.0", "dependencies": { "react": "^19.0.0", "react-dom": "^19.0.0" diff --git a/site/package.json b/site/package.json index 940a900..f1b7fa2 100644 --- a/site/package.json +++ b/site/package.json @@ -1,7 +1,7 @@ { "name": "d3ro-voice-site", "private": true, - "version": "1.6.0", + "version": "1.7.0", "type": "module", "scripts": { "dev": "vite --port 5199 --host", diff --git a/site/src/release.ts b/site/src/release.ts index de0396b..0c17ae8 100644 --- a/site/src/release.ts +++ b/site/src/release.ts @@ -5,10 +5,10 @@ // NAS 배포는 바이너리를 포함하지 않으므로 `/releases/...` 같은 로컬 경로는 // 실제 배포 환경에서 404가 된다. -export const DESKTOP_VERSION = '1.6.0' +export const DESKTOP_VERSION = '1.7.0' /** 릴리스 게시일. `release/product-version.json`의 releaseDate와 같아야 한다. */ -export const DESKTOP_RELEASE_DATE = '2026-09-24' +export const DESKTOP_RELEASE_DATE = '2026-09-27' const FORGEJO_ORIGIN = 'https://git.chanpaca.net' const FORGEJO_OWNER = 'yunchan'