release v1.2.9
This commit is contained in:
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.2.9] - 2025-12-20
|
||||||
|
|
||||||
|
- Session auto‑cleanup feature with configurable retention for each app version including VSCode extension
|
||||||
|
- Ability to update web package from mobile/PWA view in setting
|
||||||
|
- A lot of different optimization for a long sessions
|
||||||
|
|
||||||
|
|
||||||
## [1.2.8] - 2025-12-19
|
## [1.2.8] - 2025-12-19
|
||||||
|
|
||||||
- Introduced update mechanism for web version that doesn't need any cli interaction
|
- Introduced update mechanism for web version that doesn't need any cli interaction
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "openchamber-monorepo",
|
"name": "openchamber-monorepo",
|
||||||
"version": "1.2.8",
|
"version": "1.2.9",
|
||||||
"description": "OpenChamber monorepo workspace for web, ui, and desktop runtimes",
|
"description": "OpenChamber monorepo workspace for web, ui, and desktop runtimes",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openchamber/desktop",
|
"name": "@openchamber/desktop",
|
||||||
"version": "1.2.8",
|
"version": "1.2.9",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"desktopPrerequisites": [
|
"desktopPrerequisites": [
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "openchamber-desktop"
|
name = "openchamber-desktop"
|
||||||
version = "1.2.8"
|
version = "1.2.9"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
|
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
|
||||||
"productName": "OpenChamber",
|
"productName": "OpenChamber",
|
||||||
"version": "1.2.8",
|
"version": "1.2.9",
|
||||||
"identifier": "ai.opencode.openchamber",
|
"identifier": "ai.opencode.openchamber",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": "pnpm dev",
|
"beforeDevCommand": "pnpm dev",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openchamber/ui",
|
"name": "@openchamber/ui",
|
||||||
"version": "1.2.8",
|
"version": "1.2.9",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/main.tsx",
|
"main": "src/main.tsx",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export const SessionRetentionSettings: React.FC = () => {
|
|||||||
setMobileDraftDays(String(autoDeleteAfterDays));
|
setMobileDraftDays(String(autoDeleteAfterDays));
|
||||||
}, [autoDeleteAfterDays]);
|
}, [autoDeleteAfterDays]);
|
||||||
|
|
||||||
const { candidates, isRunning, runCleanup, keepRecentCount } = useSessionAutoCleanup({ autoRun: false });
|
const { candidates, isRunning, runCleanup } = useSessionAutoCleanup({ autoRun: false });
|
||||||
const pendingCount = candidates.length;
|
const pendingCount = candidates.length;
|
||||||
|
|
||||||
const handleRunCleanup = React.useCallback(async () => {
|
const handleRunCleanup = React.useCallback(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "openchamber",
|
"name": "openchamber",
|
||||||
"displayName": "OpenChamber",
|
"displayName": "OpenChamber",
|
||||||
"description": "AI coding assistant powered by OpenCode",
|
"description": "AI coding assistant powered by OpenCode",
|
||||||
"version": "1.2.8",
|
"version": "1.2.9",
|
||||||
"publisher": "fedaykindev",
|
"publisher": "fedaykindev",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { RuntimeAPIs, TerminalAPI, GitAPI, NotificationsAPI } from '@openchamber/ui/lib/api/types';
|
import type { RuntimeAPIs, TerminalAPI, GitAPI, NotificationsAPI, GitIdentityProfile } from '../../../ui/src/lib/api/types';
|
||||||
import { createVSCodeFilesAPI } from './files';
|
import { createVSCodeFilesAPI } from './files';
|
||||||
import { createVSCodeSettingsAPI } from './settings';
|
import { createVSCodeSettingsAPI } from './settings';
|
||||||
import { createVSCodePermissionsAPI } from './permissions';
|
import { createVSCodePermissionsAPI } from './permissions';
|
||||||
@@ -40,8 +40,8 @@ const createStubGitAPI = (): GitAPI => ({
|
|||||||
getCurrentGitIdentity: async () => null,
|
getCurrentGitIdentity: async () => null,
|
||||||
setGitIdentity: async () => ({ success: false, profile: { id: '', name: '', userName: '', userEmail: '' } }),
|
setGitIdentity: async () => ({ success: false, profile: { id: '', name: '', userName: '', userEmail: '' } }),
|
||||||
getGitIdentities: async () => [],
|
getGitIdentities: async () => [],
|
||||||
createGitIdentity: async (p) => p,
|
createGitIdentity: async (profile: GitIdentityProfile) => profile,
|
||||||
updateGitIdentity: async (_, p) => p,
|
updateGitIdentity: async (_id: string, profile: GitIdentityProfile) => profile,
|
||||||
deleteGitIdentity: async () => {},
|
deleteGitIdentity: async () => {},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { SettingsAPI, SettingsLoadResult, SettingsPayload } from '@openchamber/ui/lib/api/types';
|
import type { SettingsAPI, SettingsLoadResult, SettingsPayload } from '../../../ui/src/lib/api/types';
|
||||||
|
|
||||||
// Use same endpoints as web - fetch interceptor handles URL rewriting
|
// Use same endpoints as web - fetch interceptor handles URL rewriting
|
||||||
const SETTINGS_ENDPOINT = '/api/config/settings';
|
const SETTINGS_ENDPOINT = '/api/config/settings';
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { createVSCodeAPIs } from './api';
|
import { createVSCodeAPIs } from './api';
|
||||||
import { onThemeChange, sendBridgeMessage } from './api/bridge';
|
import { onThemeChange, sendBridgeMessage } from './api/bridge';
|
||||||
import type { RuntimeAPIs } from '@openchamber/ui/lib/api/types';
|
import type { RuntimeAPIs } from '../../ui/src/lib/api/types';
|
||||||
import {
|
import {
|
||||||
buildVSCodeThemeFromPalette,
|
buildVSCodeThemeFromPalette,
|
||||||
readVSCodeThemePalette,
|
readVSCodeThemePalette,
|
||||||
type VSCodeThemeKind,
|
type VSCodeThemeKind,
|
||||||
type VSCodeThemePayload,
|
type VSCodeThemePayload,
|
||||||
} from '@openchamber/ui/lib/theme/vscode/adapter';
|
} from '../../ui/src/lib/theme/vscode/adapter';
|
||||||
|
|
||||||
type ConnectionStatus = 'connecting' | 'connected' | 'error' | 'disconnected';
|
type ConnectionStatus = 'connecting' | 'connected' | 'error' | 'disconnected';
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@ declare global {
|
|||||||
__OPENCHAMBER_VSCODE_THEME__?: VSCodeThemePayload['theme'];
|
__OPENCHAMBER_VSCODE_THEME__?: VSCodeThemePayload['theme'];
|
||||||
__OPENCHAMBER_VSCODE_SHIKI_THEMES__?: { light?: Record<string, unknown>; dark?: Record<string, unknown> } | null;
|
__OPENCHAMBER_VSCODE_SHIKI_THEMES__?: { light?: Record<string, unknown>; dark?: Record<string, unknown> } | null;
|
||||||
__OPENCHAMBER_CONNECTION__?: { status: ConnectionStatus; error?: string };
|
__OPENCHAMBER_CONNECTION__?: { status: ConnectionStatus; error?: string };
|
||||||
|
__OPENCHAMBER_HOME__?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,4 +299,4 @@ window.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {
|
|||||||
|
|
||||||
return originalFetch(input as RequestInfo, init);
|
return originalFetch(input as RequestInfo, init);
|
||||||
};
|
};
|
||||||
import('@openchamber/ui/main');
|
import('../../ui/src/main');
|
||||||
|
|||||||
@@ -296,15 +296,23 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Add user message optimistically
|
// Add user message optimistically
|
||||||
|
const messageId = `temp-${Date.now()}`;
|
||||||
|
const partId = `part-${messageId}`;
|
||||||
|
const userPart: Part = {
|
||||||
|
id: partId,
|
||||||
|
sessionID: currentSessionId,
|
||||||
|
messageID: messageId,
|
||||||
|
type: 'text',
|
||||||
|
text: content,
|
||||||
|
} as Part;
|
||||||
const userMessage: MessageRecord = {
|
const userMessage: MessageRecord = {
|
||||||
info: {
|
info: {
|
||||||
id: `temp-${Date.now()}`,
|
id: messageId,
|
||||||
sessionId: currentSessionId,
|
sessionID: currentSessionId,
|
||||||
role: 'user',
|
role: 'user',
|
||||||
parts: [{ type: 'text', text: content }],
|
|
||||||
time: { created: Date.now() },
|
time: { created: Date.now() },
|
||||||
} as Message,
|
} as Message,
|
||||||
parts: [{ type: 'text', text: content }],
|
parts: [userPart],
|
||||||
};
|
};
|
||||||
|
|
||||||
const currentMessages = messages.get(currentSessionId) || [];
|
const currentMessages = messages.get(currentSessionId) || [];
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openchamber/web",
|
"name": "@openchamber/web",
|
||||||
"version": "1.2.8",
|
"version": "1.2.9",
|
||||||
"private": false,
|
"private": false,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./server/index.js",
|
"main": "./server/index.js",
|
||||||
|
|||||||
Reference in New Issue
Block a user