Commit graph

14 commits

Author SHA1 Message Date
lin onetwo
ce332374bc
Fix/misc bug2 (#698)
* fix: hide non-wiki workspaces from menu and disable remove for them (#694)

* fix(workspace): make workspace settings save transactional to prevent data loss

- Move disk write before memory update in Workspace.set()
- Remove error swallowing in writeTidgiConfig() to let errors propagate
- Add error handling in useForm.ts to catch and log save failures
- Add UI error display in EditWorkspace/index.tsx
- Only update Observable after successful persistence

This fixes the issue where save button disappears but changes aren't
persisted to tidgi.config.json, causing data loss when reopening settings.

* feat(i18n): add error messages for workspace save failures

Add SaveError and SaveErrorPrefix translations in English and Chinese
to display error messages when workspace settings fail to save.

* test(e2e): add test for tagNames persistence and missing step definitions

- Add @edit-workspace-save-tagnames scenario to verify tagNames persist
  after save to tidgi.config.json
- Add 'I clear and type' step definition for clearing input before typing
- Add 'I close current window' step definition for closing windows
- This test covers the regression where save button disappears but
  changes aren't persisted

* use 5.4.0

* fix: spaced file in git op

* fix: menu register race condition

* Update pnpm-lock.yaml

* Update wiki

* fix: regenerate lockfile with pnpm 10.33.0 to fix checksum format

* fix: remove unused import and useless constructor

* fix: address Copilot review comments

- Use new path for rename/copy in git operations
- Ensure transactional workspace save (persist before cache update)
- Normalize null label to undefined in menu

* Remove close-window step; simplify UI typing

Remove the Cucumber step that closed the current window and simplify a UI step by calling locator.fill(...) inline (also replace {tmpDir} in the input). Clean up minor whitespace in gitOperations and fix indentation/extra brace around startWiki error handling in the wiki service to correct control flow and prevent accidental scope issues.

* Improve workspace form, git diff, and UI tests

Refactor EditWorkspace form and UI behavior, make git diff/status handling more robust, and update E2E tests.

- Add hasConfigChanges and related effects in useForm to correctly detect config-only changes and control restart requests; fix save button visibility in EditWorkspace and pass currentWorkspace to restart snackbar. Rename workspace section test id from 'workspace-section-search' to 'preference-section-search'.
- Enhance gitOperations.getFileDiff to use porcelain -z and a helper to parse per-path status (getPorcelainStatusForPath) for reliable untracked/deleted detection.
- Add clickBrowserViewElementWithRetry helper with backoff and text-aware selector handling; replace repetitive click logic in browser view step definitions and remove some redundant browser background assertions and a deprecated clear-and-type step.
- Update feature files (gitLog, editWorkspace, vectorSearch) to reflect selector/id/name changes and i18n fallbacks for tab/button text.

* doc

* Use localized draft selector and show e2e window

Update feature tests to target the localized draft tiddler title (data-tiddler-title$='的草稿') instead of the English prefix selector. Applied the change across features/hibernation.feature and features/tiddler.feature to ensure selectors match localized UI. Also enable SHOW_E2E_WINDOW=1 in the test:manual-e2e script in package.json so manual end-to-end runs open a visible window for debugging.
2026-04-21 22:14:43 +08:00
lin onetwo
ee5b48c32a
Fix/misc bug1 (#697)
* fix: move useState/useEffect before conditional early return to fix hooks order error in search mode

* feat: hide friendLinks section from preferences

* feat: add search entry in preferences sidebar that focuses the search input

* feat: remove friendLinks section entirely and split Preference.Search i18n key

* feat: add search entry in workspace sidebar, fix search section title key

* fix: include custom items in search and render info cards in search results

* feat: add missing items to sync/externalAPI/aiAgent schemas for search coverage

* feat: add EmbeddingSection, wire workspace search section, remove old search result views

* fix: apply dark/light palette before serving getIndex to fix startup theme race

* feat: add receiveBundleAndFetch for bundle-based mobile push

* track latest tiddlywiki5 prerelease

* Revert "fix: apply dark/light palette before serving getIndex to fix startup theme race"

This reverts commit e1c096439d.

* Reimplement "fix: apply dark/light palette before serving getIndex to fix startup theme race"

This reverts commit e1c096439d.

* feat: expose runGitCommand, writeTempGitFile, deleteTempGitFile for plugins

Allow TiddlyWiki plugins (like tw-mobile-sync) to run arbitrary git commands
and manage temp files in the .git directory. This reduces the need to rebuild
TidGi Desktop when changing git-related plugin behavior.

Methods include path traversal protection for writeTempGitFile/deleteTempGitFile.

* refactor: replace receiveBundleAndFetch/mergeAfterPush with generic methods

- Removed receiveBundleAndFetch (logic moved to tw-mobile-sync plugin)
- Removed mergeAfterPush (logic moved to tw-mobile-sync plugin)
- Added readWorkspaceFile and writeWorkspaceFile for plugin file I/O
- runGitCommand, writeTempGitFile, deleteTempGitFile remain for plugin git operations
- All mobile-sync-specific logic now lives in the tw-mobile-sync plugin

* test(e2e): deduplicate browser-view palette steps and merge palette scenarios

* test(e2e): isolate palette outline examples by name

* test(e2e): decouple smoke logging assertion from worker lifecycle

* fix: persist workspace immediately on create to survive fast app close

Workspace.create() now calls set() with immediate=true so the new
workspace record is flushed to settings.json synchronously, before any
before-quit handler runs. Previously, if the app was closed while git
init was still running (but after workspace.create had returned), the
workspace record would only be in memory and would be lost on the next
launch, causing Find 0 existing wiki workspaces and a duplicate
default-wiki creation attempt.

Also move applyInitialPaletteBeforeIndexRender from startNodeJSWiki to
IpcServerRoutes.getIndex so the palette is applied on every index
render instead of only at server startup, and thread shouldUseDarkColors
through ipcServerRoutes.setConfig for the same reason.

Rename args param to gitArguments in GitServerService.runGitCommand to
avoid shadowing the outer variable and fix the ESLint no-shadow warning.

* test(e2e): fix browser-view step and wiki-worker restart timing

browserView.ts: replace fixed 10-attempt backoff with a polling loop
that fills the full 25 s Cucumber step budget (210 fast polls), because
WebContentsView creation is async and each failed poll returns in < 1 ms
(no webContents yet), making the old 10-attempt window too narrow.

wiki.ts: replace WIKI_WORKER_STARTED wait before restart with
VIEW_LOADED wait. WIKI_WORKER_STARTED is only written on the direct
startWiki() path; when the app starts via restartWorkspaceViewService
the marker is never emitted. VIEW_LOADED fires after did-stop-loading
and is a reliable proxy that the wiki worker is running and the view is
ready.

application.ts: add launchEnvOverrides map to ApplicationWorld and
thread it into the Electron launch env so scenarios can inject test-only
env vars (e.g. TIDGI_E2E_MOCK_SYSTEM_PALETTE) without modifying the
shared process environment.

* test(e2e): fix @wiki scenario timing and assertions

defaultWiki.feature:
- Explicitly click workspace button before asserting browser-view in
  Background; without a click the WebContentsView is never activated.
- Remove the VIEW_LOADED wait after workspace creation (redundant now
  that browser-view step polls for the full step budget).
- Replace the fragile 'Test content for lazy-all' text assertion with a
  structural check (open tiddler + confirm element exists); in lazy-all
  mode TiddlyWiki renders tiddlers lazily so the body text is often the
  sidebar/chrome rather than the tiddler body at assertion time.
- Remove the 'move back to wiki-test' tail of the move-workspace
  scenario; test-artifacts are wiped before every run so there is no
  need to restore the original location.

simplifiedWiki.feature:
- Wait for WORKSPACE_CREATED log marker before closing the app on first
  launch; git-init inside initWikiGitTransaction can take several
  seconds, and closing too early meant workspace.create() never ran,
  leaving settings.json with no wiki workspace on the second launch.

windowRestore.feature:
- Replace the unreliable WIKI_WORKER_STARTED + VIEW_LOADED wait in
  Background with WORKSPACE_CREATED + 'browser view should be loaded
  and visible'; the former marker is not emitted on the
  restartWorkspaceViewService path used at app startup.

* chore: update pnpm-lock and template/wiki submodule

* Update pnpm-lock.yaml

* test(e2e): remove unused browser view retry constants

* test(e2e): stabilize subwiki update and worker readiness wait

* fix: enforce LF line endings in .gitattributes to match .editorconfig

* feat(e2e): implement CPU-based dynamic timeout scaling

Add cpuBenchmark.ts to measure CPU performance at suite startup and derive
a performance multiplier (≥1.0) that scales all E2E timeouts. Fast machines
get tight timeouts for quick bug detection; slow machines get the room they
need without false timeout failures.

- cpuBenchmark.ts: Run ~200ms pure CPU workload, compare to reference (120ms)
- Local dev: enforce ≥1.8× floor (git I/O overhead not reflected in CPU score)
- CI: keep 1.0× (dedicated runners with known performance)
- timeouts.ts: Apply multiplier to CUCUMBER_GLOBAL_TIMEOUT and derived values
- Print diagnostic: [Timeout Config] multiplier=1.80× step budget=45000 ms

* fix(e2e): fix WorkerServicesReady marker search pattern

The log marker is written as 'test-id-WorkerServicesReady' (without brackets)
but tests were searching for '[test-id-WorkerServicesReady]' (with brackets).
ANSI color codes in logs further broke the pattern match.

Also implement proper marker clearing: wait for initial readiness, restart,
clear stale markers, then wait for fresh markers after restart.

Fixes 3 failing scenarios:
- AI button in Git Log window uses AI-generated commit message
- Plain backup button in Git Log window uses default message
- Move workspace to a new location

* fix(e2e): simplify isWikiRunning check to avoid TypeScript assertion in executeJavaScript

Remove TypeScript type assertion from executeJavaScript string code,
use runtime property checks instead to avoid script execution failure.

* Revert "fix(e2e): fix WorkerServicesReady marker search pattern"

This reverts commit 39f91256092d4ce402eb87b9b70d08c40a6d13fb.

* feat(e2e): increase MIN_MULTIPLIER to 2.0× for local dev

Increase from 1.8× to 2.0× to provide 100% timing cushion for slow
machines. This gives 50s timeout budget (25s base × 2.0) which should
be sufficient for browser view loading and wiki worker operations.

* fix: restore lazy AI deleted test. don't delete test, otherwise I will add it back

* feat(e2e): auto-calibrate timeout using @smoke scenario

Remove MIN_MULTIPLIER hack and synthetic CPU benchmark. Instead:
- @smoke scenario automatically measures real E2E performance
- Hooks record duration and calculate multiplier vs CI baseline
- Pure measurement-based scaling, no hardcoded floors
- Fallback to 3.0× only if smoke hasn't run yet

This captures the full stack (CPU, I/O, Electron startup, rendering) in
one real-world measurement, eliminating guesswork. No separate calibration
command needed - just run tests normally.

* fix(e2e): exclude test files from cucumber require pattern

* fix: should save $:/layout

* chore: update 5.4.0 prerelease

* Update test.yml

* fix: Some repo is clone from github, use https to avoid ssh key issue

delete the lock file and pnpm i regenerate fix this

* lint

* fix(ci): restore search section and precompute E2E timeout calibration

Restore the missing search preferences section so schema validation passes in CI.
Also move E2E timeout calibration ahead of cucumber startup so timeout values
are computed before step modules freeze their constants. Use the smoke scenario
as a real-world baseline and derive a heavier timeout family for restart and
browser-view operations that are dominated by I/O and Electron lifecycle work
on slow machines.

* fix(sync): restore mobile merge-after-push hook

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* test(e2e): stabilize selector waits and calibration state

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* test(e2e): remove invalid pre-restart worker wait

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* fix(preferences): remove global embedding section

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* test(e2e): move vector search flow to workspace settings

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* fix(vector-search): validate sqlite row ids before storing embeddings

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* feat(git-log): add multi-select batch actions

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>

* fix(git-log): support multi-commit undo, fix path traversal, fix search l10n, fix sidebar divider

* fix(test): use data-testid for undo button selector in E2E test

UndoCommit translates to '撤回此提交' in zh-Hans, not '撤销'.
Use data-testid='undo-commit-button' for reliable matching.

* fix(git-log): batch undo via undoCommits, notify git log on tiddler save

- Add undoCommits() to git service: undoes N commits sequentially and fires
  only ONE gitStateChange notification at the end, avoiding the race where
  rapid-fire events drop refreshes due to loadGitLogInProgress guard
- CommitDetailsPanel.handleUndo now uses undoCommits() instead of looping undoCommit()
- FileSystemAdaptor.saveTiddler now calls git.notifyFileChange after every save
  so the git log window auto-refreshes when tiddlers are created/modified, even
  when enableFileSystemWatch is false (the default)

* fix(test): mock git.notifyFileChange in FileSystemAdaptor unit tests

* fix(e2e): use BrowserWindow.id to match tidgiMiniWindow Playwright page

The previous code matched the mini window's Playwright page by document.title,
checking for '太记小窗', 'TidGi Mini Window', or 'TidGiMiniWindow'. But the
mini window loads the same index.html as the main window (title='TidGi'), so the
title-based match fails whenever React hasn't yet updated document.title.

Fix: after finding the BrowserWindow by title (getTitle() contains 'Mini Window')
or by dimensions as a fallback, compare each Playwright Page's underlying
BrowserWindow.id to the found window's id. This is reliable regardless of
document.title state.

* fix(lint): remove unnecessary non-null assertion in application.ts

* fix(lint): rename args to searchParams to satisfy unicorn/prevent-abbreviations

* fix(lint): rename searchParams to searchParameters

* fix(window): wait for isVisible() after showWindow() in test mode

In E2E tests, BrowserWindow.show() is asynchronous with respect to
isVisible() returning true. The IPC call to toggleTidgiMiniWindow()
resolves before the OS has actually marked the window as visible,
causing the subsequent 'confirm visible' step to fail.

Add a poll-until-visible loop (50ms interval) after showWindow()
when isTest is true, so the IPC only resolves once isVisible() is
actually true.

---------

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-20 18:42:29 +08:00
lin onetwo
c53292b548
Fix/misc bug2 (#689)
* Improve IPC sync and multi-window browser views

Add robust revision tracking and per-title save serialization to the IPC sync adaptor to ignore stale SSE echoes and prevent overlapping saves (titlesBeingSaved, lastSavedRevisions, pendingSaveOperations, queueSaveOperation, markSaveStart/Finish). Ensure deletions and loads update stored revisions. Disable backgroundThrottling for BrowserWindow/WebContentsView so renderer callbacks (SSE/observables) continue while windows/views are hidden. Update webContents view helpers and step definitions to target a specific window/page (pass Page/currentWindow through executeInBrowserView, getTextContent, click/type/press helpers), and improve view selection by matching target window URL. Update docs to document hidden-window behavior and revision filtering, and add/update feature tests for cross-window sync, hidden TidGi mini window sync, and a rapid-save tiddler scenario.

* Handle main workspace routing for tiddlers

Adjust FileSystemAdaptor routing so that when a tiddler matches the main workspace it uses the main watch path (watchPathBase) instead of treating it as a sub-wiki folder. Add an isMainWorkspaceMatch check to pick the correct target directory and to avoid generating sub-wiki file info for the main workspace.

Also update tests and feature file: extend subWiki.feature to verify routing to the main workspace path when the workspace has a routing tag configured, and add unit tests to assert routing to the main wiki tiddlers folder and to the wiki root when useWikiFolderAsTiddlersPath is enabled.

* review

* v0.13.0-prerelease22
2026-03-24 18:28:38 +08:00
lin onetwo
613d811846
fix: ci (#687) 2026-03-13 19:04:12 +08:00
lin onetwo
2a5eb349f2
Fix/misc bug (#686)
* refactor: replace time-window echo prevention with mtime+size and content checks

FileSystemWatcher: use recorded mtime+size (lastWriteStats) and saving-state
flag (titlesBeingSaved) to skip own-write echoes, plus content identity fallback.
Removes unreliable setTimeout-based exclude/scheduleFileInclusion.

ipcServerRoutes: replace TTL Map with synchronous Set (ipcPendingTitles),
attach changeCount as revision to change Observable.

ipc-syncadaptor: use lastSavedRevisions for revision-based echo prevention,
batch large syncs via requestIdleCallback.

Also: EditWorkspace controlled input fixes, port field local state, agent
framework config setConfig/persistConfig split, misc value ?? '' fixes.

* Enhance e2e screenshots and test logging

Improve end-to-end test reliability and diagnostics:

- Capture window screenshots for non-BrowserView steps: add captureWindowScreenshot and use it in AfterStep to capture the Electron BrowserWindow via webContents.capturePage() when appropriate; keep existing captureScreenshot for BrowserView steps. (features/supports/webContentsViewHelper.ts, features/stepDefinitions/application.ts)
- Prevent wiki restart race: wait for the wiki worker '[test-id-WIKI_WORKER_STARTED]' marker before restarting to avoid DoubleWikiInstanceError. (features/stepDefinitions/wiki.ts)
- Make git-related test markers more visible by switching logger.debug → logger.info for git init/commit/sync/checkout/revert and git-log rendering markers, ensuring e2e tests can reliably detect these events. (src/services/git/index.ts, src/windows/GitLog/useGitLogData.ts)
- Minor feature test tweak: wait for page to load in defaultWiki.feature before interacting with the editWorkspace window.

These changes reduce flaky screenshots and timing races in tests and improve test marker visibility for e2e detection.

* Enhance e2e screenshots and test logging

Improve end-to-end test reliability and diagnostics:

- Capture window screenshots for non-BrowserView steps: add captureWindowScreenshot and use it in AfterStep to capture the Electron BrowserWindow via webContents.capturePage() when appropriate; keep existing captureScreenshot for BrowserView steps. (features/supports/webContentsViewHelper.ts, features/stepDefinitions/application.ts)
- Prevent wiki restart race: wait for the wiki worker '[test-id-WIKI_WORKER_STARTED]' marker before restarting to avoid DoubleWikiInstanceError. (features/stepDefinitions/wiki.ts)
- Make git-related test markers more visible by switching logger.debug → logger.info for git init/commit/sync/checkout/revert and git-log rendering markers, ensuring e2e tests can reliably detect these events. (src/services/git/index.ts, src/windows/GitLog/useGitLogData.ts)
- Minor feature test tweak: wait for page to load in defaultWiki.feature before interacting with the editWorkspace window.

These changes reduce flaky screenshots and timing races in tests and improve test marker visibility for e2e detection.

* Use startTransition to update port on change

Import startTransition from React and update the port input handler to capture the raw value, update local display state, and defer parsing/setting the workspace port inside startTransition. The handler now parses an empty value as 0, validates the number (non-NaN and >= 0) before calling workspaceSetter, improving responsiveness by marking the workspace update as non-urgent. Also removed an obsolete inline comment.

* Improve E2E, view sync, and wiki IPC robustness

Multiple fixes and improvements across E2E tests, view management, wiki IPC, and workspace handling:

- Docs: add SHOW_E2E_WINDOW env var note to allow visible Electron windows during manual E2E runs.
- Features: simplify/adjust cross-window sync scenario and refine hibernation workspace selectors to avoid collisions with similarly named workspaces.
- E2E steps: make AI-request assertion resilient by polling (backOff); replace brittle DOM-driven tiddler creation with direct TiddlyWiki API calls in browserView step definitions for reliability; add small UI click pause and longer click timeout in ui steps.
- Timeouts: unify global timeout to 25s and derive Playwright short/log wait timeouts from it.
- WebContents helpers: prefer the last child wiki view (active one) when multiple views exist and update comments.
- WikiEmbedTabContent: wake workspace on mount and simplify cleanup to always clear custom bounds on unmount; handle errors.
- Chat UI: hide TabListDropdown in split view.
- Agent instances: default missing agentFrameworkID to 'basicPromptConcatHandler' for older definitions.
- View service: add activelyShownViews set to avoid hiding views that were explicitly shown via showView(); clear stale custom bounds when showing views; avoid moving views offscreen when actively shown; ensure cleanup removes active flag.
- IPC server routes: prefer URL-based workspace ID (resolve correct casing via workspace service) to handle cross-session routing; pass effective workspace ID to route handlers.
- Wiki service: add startup timeout to avoid indefinite hangs waiting for worker boot message.
- IPC sync adaptor: implement titlesBeingSaved/titlesBeingLoaded sets to prevent save-back and SSE echo issues; mark titles when saving/loading and suppress spurious saves.
- Wiki worker IPC routes: replace per-subscriber addEventListener with a shared Subject and single change listener to avoid missed events and cross-window sync bugs; forward subject events to subscribers and log readiness.
- Windows: keep windows hidden during tests by default but allow showing them when SHOW_E2E_WINDOW=1.
- Workspaces: compute next insert order so new wiki workspaces appear at the top of regular workspaces (shift others down).

Overall these changes reduce flakiness in tests, prevent cross-window echo and routing bugs, make view lifecycle handling safer, and improve developer ergonomics for debugging E2E runs.

* fix(e2e): bypass system proxy for git HTTP operations in sync test

Git clone/push/fetch to localhost was routed through the system proxy (port 1080),
which returned 502 Bad Gateway. Add -c http.proxy= to disable proxy for all
HTTP git commands in the sync test step definitions.

* fix: address CI lint errors and Copilot review comments

Lint fixes:
- useOptimisticField: rename *Ref/*Fn vars to *Reference/*Function (unicorn/prevent-abbreviations)
- wiki/index: rename args to arguments_ (unicorn/prevent-abbreviations)
- FileSystemWatcher: use specific type assertion for tiddler fields to avoid no-base-to-string warning
- webContentsViewHelper: rename loop var i to index
- interface.ts: merge duplicate imports from same module (dprint)
- ipc-syncadaptor: expand queueMicrotask callback (dprint)

Copilot review fixes:
- ipcServerRoutes: move subscription to outer scope so Observable teardown
  is returned synchronously from the constructor, preventing subscription leaks
  when observers are disposed before the async IIFE resolves
- useOptimisticField: capture localValue at focus time; on blur only commit
  when user actually changed the value (not when serverValue updated while focused)
- FileSystemWatcher.markSaveComplete: guard scheduleGitNotification behind
  non-empty absoluteFilePath to avoid spurious git notifications on error paths

* fix(e2e): handle corrupt settings.json in cleanup and use filechooser intercept for image upload

- tidgiMiniWindow cleanup: wrap readJson with try/catch so truncated/empty
  settings.json (race between app shutdown write and After hook read) is
  handled gracefully instead of throwing SyntaxError

- application.ts: add 'I prepare to select file ... for file chooser' step
  that registers a Playwright one-shot filechooser handler BEFORE the click
  that triggers fileInput.click(). This prevents the native OS dialog from
  appearing entirely (the chooser is resolved directly with the supplied file).

- talkWithAI.feature: replace two-step 'click then setInputFiles' with the
  new 'prepare filechooser  click' pattern so no OS dialog is shown during
  the AI image attachment test
2026-03-12 21:19:10 +08:00
linonetwo
a0e7a6ec57 Add mobile HTTP git sync tests & merge utilities
Introduce end-to-end tests and server-side support for mobile-style Smart HTTP git sync. Adds a new mobileSyncConflict.feature and extended sync.step definitions to simulate HTTP clone/sync cycles, pushes, and assertions (including file content checks and HTTP readiness/backoff). Introduces src/services/gitServer/mergeUtilities.ts to resolve .tid conflicts (mobile metadata wins, body merged) and common git helpers, and wires those into the git server (use runGitCollectStdout, DESKTOP_GIT_IDENTITY, and mergeAfterPush endpoint). Misc: update workspace restart flow and settings handling, tweak test helpers (skip screenshot capture for file steps), adjust slugify rules, minor UI/formatting change, and bump git-sync-js dependency (with lockfile update).
2026-02-24 16:50:08 +08:00
linonetwo
185f719d94 Fix workspaceID case bug, esbuild outbase, autocomplete panel re-render, VIEW_LOADED handler, streaming status polling, and increase executeInBrowserView timeout for E2E stability. All 52 scenarios pass 2026-02-21 12:36:58 +08:00
linonetwo
975b7e3e1f feat(e2e): support simplified root wiki and stabilize browser-view waits 2026-02-20 18:51:14 +08:00
lin onetwo
a712b2ff51
Fix/misc bug (#679)
* Create ErrorDuringRelease.md

* Enforce test timeouts and add root tiddler scenario

Set global and step timeouts to 5s (local) and 10s (CI) across cucumber config and step definitions to standardize test execution times. Add a new scenario to verify root tiddler configuration and content loading after restart. Enhance start-e2e-app script to accept or auto-detect test scenario names and pass them to the app.

* Improve error handling for window and view initialization

Enhanced error reporting and handling when browser windows are not ready or fail to register in windowService. Updated focus logic to dynamically retrieve the current browser window, improving reliability during workspace hibernation and wake-up scenarios.

* Remove AfterAll hook and add --exit to e2e tests

Eliminates the AfterAll hook that forced process exit in cleanup.ts to prevent hanging after tests. Adds the --exit flag to the cucumber-js command in the e2e test script to ensure proper test process termination.

* Add step to restart workspace in wiki tests

Introduces a new step definition 'I restart workspace {string}' to programmatically restart a wiki workspace during tests. Updates the root tiddler scenario to use this step for verifying lazy-load behavior after workspace restart, improving test reliability and clarity.

* Centralize and standardize E2E test timeouts

Extracted timeout values into features/supports/timeouts.ts and replaced hardcoded timeouts in step definitions with named constants. This ensures consistent timeout handling across local and CI environments, reduces duplication, and clarifies intent. Also improved workspace update logic to check watch-fs state before restart and cleaned up related log marker handling.

* Improve i18n coverage and add Windows installer log access

Expanded and unified i18n keys for error messages and UI labels across multiple languages. Refactored code to remove hardcoded default values from translation calls. Added a Developer Tools option to open the Windows installer log folder (SquirrelTemp) when running on Windows. Introduced a placeholder file to preserve dynamic i18n keys for error messages.

* Initialize Tidgi mini window before workspace views

Moved the initialization of the Tidgi mini window to occur before initializing all workspace views in main.ts to ensure correct view creation. Added a clarifying comment in DeveloperTools.tsx regarding the SquirrelSetup.log path.

* Refactor Tidgi mini window initialization logic

Tidgi mini window creation now only creates the window; view creation is deferred to initializeAllWorkspaceView. Updated related comments and logging for clarity. Also fixed formatting in French translations and improved documentation for error handling during release.

* Add model feature chips to model selection UI

Introduces a ModelFeatureChip component to visually display model features in the model selector and new model dialog. Updates defaultProviders to include new models with features, and enhances the UI to show feature chips for each model, improving clarity for users selecting models.

* Add image attachment support to chat messages

This update enables users to attach image files to chat messages, including UI changes for file selection and preview, backend persistence of attachments, and prompt concatenation logic to include images in AI requests. It also adds error handling and i18n for model vision support, updates message rendering to display images, and improves logging and API validation for vision-capable models.

* Improve streaming status handling for agent messages

Adds a failsafe to clear streaming status when an agent reaches a terminal state and refines logic to prevent marking completed messages as streaming. Also updates message stream completion in AgentInstanceService to ensure proper cleanup and delivery of IPC messages. Includes new feature tests for message streaming status and image upload scenarios.

* Add cross-window sync feature and test steps

Introduces a new feature file for cross-window synchronization scenarios. Adds step definitions to open workspaces in new windows and execute TiddlyWiki code programmatically. Removes obsolete wiki.ts.backup file and updates agentActions for related actions.

* feat(sync): fix cross-window synchronization via SSE

- Remove overly aggressive echo prevention in backend that blocked all SSE updates
- Backend now forwards all wiki change events to subscribers
- Add comprehensive cross-window sync tests verifying bidirectional updates
- Test main->new window sync and new->main window sync scenarios
- Version bump to 0.13.0-prerelease19

* Improve file attachment handling in chat and tests

Refactors file input handling in chat tests to use Playwright's setInputFiles, updates message sending types to support optional file attachments, and enhances file metadata persistence and logging. Adjusts test expectations and UI logic to better handle and display image attachments, and clarifies combobox value assertions in ExternalAPI tests.

* Add file input validation and improve i18n messages

Added image type and size validation (10MB limit) to file input in InputContainer. Improved image preview logic. Updated French, Japanese, and Russian translations with new error messages for missing/default model and vision support. Enhanced type safety in promptConcatWithImage tests and messagePersistence logging. Fixed race condition in ExternalAPIService lazy initialization. Updated CommitDetailsPanel to use common cancel translation key.

* review

* Update browserView.ts

* Update timeouts.ts

* Update cucumber.config.js

* Update cucumber.config.js

* Move global timeout config to separate module

Extracted global timeout setup from cucumber.config.js to features/supports/timeout-config.ts using setDefaultTimeout. This ensures the timeout is set via code rather than config, improving clarity and maintainability.

* Update newAgent.feature
2026-01-26 02:43:27 +08:00
lin onetwo
6384fd8bd1
Fix/misc bug (#677)
* fix: not removed

* Optimize tidgi.config.json writes for workspace updates

Update logic to write tidgi.config.json only for the modified workspace instead of all wiki workspaces on each update. This reduces redundant file operations and improves performance during workspace updates.

* Refactor workspace saving and UI update logic

Introduced a private saveWorkspacesToSettings method to centralize logic for saving workspaces and removing syncable fields from wiki workspaces. The set and setWorkspaces methods now support skipping UI updates for batch operations, improving performance. Fixed minor issues in legacy migration and error messages.

* Add 'Ask AI' context menu and wiki embed split view

Introduces an 'Ask AI' option to the wiki context menu, enabling users to send selected text to an agent chat in a split view with the wiki embedded. Implements new tab type WIKI_EMBED, updates tab and channel types, adds localization, manages BrowserView bounds for embedding, and ensures persistence and IPC wiring for the new workflow.

* Update wiki

* electron chrome mcp mode sometimes wont show browser view

Clarified troubleshooting steps in docs/MCP.md regarding browser view issues and updated the instructions. Reordered the 'start:dev:mcp' script in package.json for better organization.

* Add agent selection to 'Talk with AI' context menu

Replaces the 'Ask AI' context menu with 'Talk with AI' and adds a submenu for selecting different agent definitions. Updates translations for all supported languages, modifies the askAIWithSelection channel to support agentDefId, and refactors tab creation logic to support split view with agent selection. Improves robustness in view management by handling case-insensitive workspace IDs and custom bounds logic.

* Add e2e test and refactor 'Talk with AI' split view logic

Introduces a new Cucumber feature for 'Talk with AI' from wiki selection, adds a step definition to trigger the workflow via IPC, and refactors split view tab creation to reuse existing tabs when possible. Updates the agent browser service to support finding or creating the appropriate split view tab, and adjusts menu and view services for improved robustness and code clarity. Also adds test IDs to relevant components for more reliable UI testing.

* Update defaultWiki.feature

* Add config error handling and i18n for agent errors

Introduces a new feature test for configuration error handling, adds step definition to remove AI settings for testing, and updates error message rendering to support new error types. Internationalized error messages and button labels for configuration issues are added in both English and Chinese locales. The error message renderer now uses a data-testid for easier testing and recognizes additional error types as fixable in settings.

* Refactor feature files to use two-column selector tables

Updated all feature files to use a standardized two-column format for selector tables, with explicit 'element description' and 'selector' columns. Step definitions in ui.ts were refactored to support this format, improving readability and maintainability of test steps and error handling.

* Delete tiddlywiki

* test: allow parallel

* test: implement scenario isolation for E2E tests

- Isolate each test scenario in test-artifacts/{scenarioSlug}/ directory
- Use dynamic ports for mock OpenAI server to avoid port conflicts
- Log VIEW_LOADED event via did-finish-load in main process (more reliable)
- Search all .log files when waiting for log markers
- Increase timeout for log marker steps to 15 seconds
- Fix ts-node cache issues by clearing cache before tests
- Move application launch to individual scenarios (required for mock server setup)

All 45 E2E test scenarios now pass consistently.

* refactor: optimize agent.feature by moving common steps to Background

- Add MockOpenAIServer.addRules() method to append responses dynamically
- Add 'I have started the mock OpenAI server without rules' step for Background
- Add 'I add mock OpenAI responses:' step to inject responses per scenario
- Move application launch and navigation to Background (shared by all scenarios)
- Keep scenario-specific mock responses in individual scenarios

This improves test maintainability by reducing duplication while keeping
scenario-specific configuration flexible.

* lint

* Refactor scenario path helpers into shared module

Moved scenario-specific path helper functions from individual step definition files to a centralized 'features/supports/paths.ts' module. Updated imports in step definitions to use the shared helpers, improving code reuse and maintainability. Also enhanced test for ContextService to skip optional runtime keys.

* Refactor slug generation to use shared slugify helper

Introduced a new src/helpers/slugify.ts utility for consistent slug generation across the codebase. Updated appPaths.ts to use the shared slugify function, improving maintainability and ensuring identical behavior for test scenario slugs. Added documentation and clarified slugification rules in relevant files. Minor comments and clarifications were added to E2E and mock server code.

* Enforce strict timeout rules in E2E test steps

Added and clarified critical warnings for AI agents regarding timeout modifications in application, cleanup, and wiki step definitions. All timeouts are now strictly limited to 5s local and 10s CI, with explicit comments and environment-based values. Updated documentation and code comments to reinforce that timeouts indicate real bugs and should not be increased.

* Update features/stepDefinitions/application.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Refactor E2E helpers, improve test reliability and cleanup

Centralizes data table parsing for UI step definitions, refactors mock OpenAI server setup, and improves workspace settings path handling for tests. Adjusts timeouts for window and app closing to better reflect real-world performance. Fixes type usage in workspace ID lookups and adds error handling for resize observer and cleanup in WikiEmbedTabContent. Enhances agent browser tab logic and view service cleanup to prevent memory leaks and catch workspace ID casing issues.

* Update agent.ts

* fix: resolve all E2E test timeout issues

* fix: improve CI test reliability with better timing and cleanup

- Use exponential-backoff library for agent creation retry logic
- Extend agent cancel delay to 1000ms for CI environments
- Fix git log refresh marker timing with queueMicrotask
- Improve cleanup timeout handling with force close strategy

All E2E tests passing locally including previously failing CI tests.

* Improve Git log E2E signal and add debug logging

Renames the test artifact in the CI workflow for clarity. Moves the E2E test timing log in useGitLogData to after entries are rendered, using a more reliable signal. Adds a debug log to notifyGitStateChange for better traceability.

* test-artifacts-ci

* Optimize test artifact handling and Git log logging

Update CI workflow to clean up large cache folders in test artifacts and only upload logs, settings, and screenshots to reduce artifact size. Refactor useGitLogData to log immediately after state updates for improved E2E test reliability, removing unnecessary setTimeout.

* Update useGitLogData.ts

* Improve Git log E2E test logging and .gitignore

Added 'test-artifacts-ci.zip' to .gitignore. Moved the '[test-id-git-log-refreshed]' log to immediately after data load for more reliable E2E test detection, and removed redundant logging from the render effect in useGitLogData.ts.

* Update useGitLogData.ts

* Update useGitLogData.ts

* Fix git log refresh marker not appearing in CI

- Move git-log-refreshed marker before RAF to ensure it's recorded
- RAF callbacks may not execute reliably in headless CI environments
- Add debug logging to track loadGitLog execution
- Add try-catch around log call to catch any errors
- Keep git-log-data-rendered in useEffect for UI tracking

* Update useGitLogData.ts

* Update useGitLogData.ts

* Add comprehensive logging to diagnose git-log-refreshed issue

- Log before RAF and inside RAF to pinpoint exact failure location
- Add try-catch to capture any errors
- Two log markers: before-raf and in-raf
- This will definitively show where the logging fails in CI

* Fix race condition: prevent concurrent loadGitLog calls

Root cause: commit triggers 2 refreshes (gitStateChange$ + handleCommitSuccess)
- First loadGitLog (refreshTrigger=1) succeeds
- Second loadGitLog (refreshTrigger=2) starts but never completes
- Add loadGitLogInProgress guard to prevent concurrent execution
- Log when loadGitLog is skipped due to in-progress call

This ensures git-log-refreshed is always logged after commit.

* Remove redundant triggerRefresh calls causing race condition

- handleCommitSuccess/Revert/Undo no longer call triggerRefresh
- gitStateChange\$ observable already triggers refresh for these operations
- Redundant calls caused 2 concurrent loadGitLog, causing CI test failures
- Local tests passed because both completed; CI failed because 2nd never completed

This ensures only 1 loadGitLog runs per git operation.

* Remove unused triggerRefresh parameter from useCommitSelection

- triggerRefresh no longer used in handlers
- Remove from interface and call site
- Clean up lint errors

* Remove triggerRefresh completely - no longer needed

- Observable subscription handles all git state changes
- Remove function definition and exports
- Fix all lint errors

Root cause resolved: commit triggered double refresh causing race condition.
Now only single refresh via observable.

* Remove fixed time waits from gitLog.feature and fix race condition

- Remove all fixed time wait steps from gitLog.feature (14 instances)
- Remove redundant triggerRefresh calls in handleCommitSuccess/Revert/Undo
- Add loadGitLogInProgress guard to prevent concurrent loadGitLog
- Root cause: commit triggered 2 refreshes causing race condition
- Only gitStateChange\$ observable now triggers refresh
- All 4 gitLog tests pass locally

* Fix clear timing: clear log BEFORE commit, not after

Root cause: test cleared git-log-refreshed AFTER commit completed
- But commit already triggered refresh and logged git-log-refreshed
- Clear deleted it, then test waited for new log that would never come
- Solution: clear BEFORE clicking commit button
- This way commit's git-log-refreshed is the first one after clear

Test now passes locally.

* Update cleanup.ts

* Initial commit when init a new git.

* Refactor feature steps for multi-element and log marker tables

Updated multiple feature files and step definitions to support table-driven steps for clicking and asserting multiple elements, and for waiting for multiple log markers in sequence. This reduces redundant waits, improves test reliability, and streamlines Gherkin syntax for multi-element actions and assertions. Also removed unnecessary manual wait steps where content or element checks now handle waiting automatically.

* Minor code cleanup and formatting improvements

Reordered imports in browserView.ts, fixed whitespace in cleanup.ts and useGitLogData.ts, and improved line formatting in GitLog/index.tsx for better readability and consistency.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: tidgi <tiddlygit@gmail.com>
2026-01-20 11:11:28 +08:00
lin onetwo
c2be8e4186
Fix/sub wiki tag tree (#667)
* fix: different out path on macos

* fix: let go hibernation promise, so it's faster on macos

* log marker [test-id-TIDGI_MINI_WINDOW_CREATED]

* Skip registerShortcutByKey  in test

* fix: mini window on mac

* Remove useless log marker

* Update handleAttachToTidgiMiniWindow.ts

* fix: log marker check all log files

* lint

* fix: open in new window now showing wiki title

* Update package.json

* feat: basic load and save to sub wiki using in-tag-tree-of

* fix: load sub-wiki content and prevent echo

* fix: test and ui logic

* test: refactor subwiki test logic to a file

* refactor: shorten steps by using dedicated step, and test underlying micro steps

* fix: review

* refactor: remove outdated method signature

* test: unit cover adaptor subwiki routing

* Update FileSystemAdaptor.routing.test.ts

* fix: merge issue
2025-12-07 03:31:34 +08:00
lin onetwo
7f5e1aa0cc
Feat/allow watch fs change on git sync
* feat: Skip restart if file system watch is enabled - the watcher will handle file changes automatically

* fix: sometimes change sync interval not working

fixes #310

* fix: Return false on sync failure - no successful changes were made

fixes #558

* fix: step that is wrong

* feat: monitoring subwiki

* AI added waitForSSEReady

* Revert "AI added waitForSSEReady"

This reverts commit 983b1c623c.

* fix: error on frontend loading worker thread

* fix

* Update wiki.ts

* auto reload view and click subwiki icon

* Refactor sync echo prevention and improve logging

Removed frontend-side echo prevention logic in ipcSyncAdaptor, relying solely on backend file exclusion for echo prevention. Improved console log wrappers to preserve native behavior and added a log statement to setupSSE. Updated test steps and file modification logic to better simulate external edits without modifying timestamps. Added internal documentation on sync architecture.

* feat: deboucne and prevent data race when write file

* Update watch-filesystem-adaptor.ts

* rename camelcase

* Update filesystemPlugin.feature

* Fix sync interval timezone handling and add tests

Refactored syncDebounceInterval logic in Sync.tsx to be timezone-independent, ensuring correct interval storage and display across all timezones. Added comprehensive tests in Sync.timezone.test.ts to verify correct behavior and document previous timezone-related bugs. fixes #310

* i18n for notification

* Update index.tsx

* fix: potential symlinks problem of subwiki

* Update Sync.timezone.test.ts

* lint

* Implement backoff for file existence check

Refactor file existence check to use backoff strategy and add directory tree retrieval for error reporting.

* Update BACKOFF_OPTIONS with new configuration

* Update wiki.ts

* remove log

* Update wiki.ts

* fix: draft not move to sub

* Update filesystemPlugin.feature

* fix: routing tw logger to file

* Update filesystemPlugin.feature

* test: use id to check view load and sse load

* Optimize test steps and screenshot logic

Removed unnecessary short waits in filesystemPlugin.feature and increased wait time for tiddler state to settle. Updated application.ts to skip screenshots for wait steps, reducing redundant screenshots during test execution.

* Check if the WebContents is actually loaded and remove fake webContentsViewHelper.new.ts created by AI

* Update view.ts

* fix: prevent echo by exclude title

* test: Then file "Draft of '新条目'.tid" should not exist in "{tmpDir}/wiki/tiddlers"

* Revert "fix: prevent echo by exclude title"

This reverts commit 86aa838d24.

* fix: when move file to subwiki, delete old file

* fix: prevent ipc echo change back to frontend

* test: view might take longer to load

* fix: minor issues

* test: fix cleanup timeout

* Update cleanup.ts

* feat: capture webview screenshot

* Update filesystemPlugin.feature

* Update SyncArchitecture.md

* rename

* test: add some time to easy failed steps

* Separate logs by test scenario for easier debugging

* Update selectors for add and confirm buttons in tests

Changed the CSS selectors for the add tiddler and confirm buttons in the filesystem plugin feature tests to use :has() with icon classes. This improves selector robustness and aligns with UI changes.

* Ensure window has focus and is ready

* Update window.ts

* fix: webview screenshot capture prevent mini window to close

* fix: Failed to take screenshot: Error: ENAMETOOLONG: name too long, open '/home/runner/work/TidGi-Desktop/TidGi-Desktop/userData-test/logs/screenshots/Agent workflow - Create notes- update embeddings- then search/2025-10-30T11-46-28-891Z-I type -在 wiki 工作区创建一个名为 AI Agent Guide 的笔记-内容是-智能体是一种可以执行任务的AI系统-它可以使用工具-搜索信息并与用户交互- in -chat input- element with selec-PASSED-page.png'

* Update window.ts

* feat: remove deprecated symlink subwiki approach

* Update wiki.ts

* fix: remove AI buggy bring window to front cause mini window test to fail

* lint

* Adjust wait time for draft saving in filesystemPlugin

Increased wait time for file system plugin to save draft.

* Adjust wait time for tiddler state stabilization

Increased wait time to ensure tiddler state settles properly.

* Refactor release workflow to simplify dependency installation

Removed installation steps for x64 and arm64 dependencies, and adjusted the build process for plugins and native modules.

* Enhance wait for IPC in filesystemPlugin feature

Added a wait time to improve reliability of content update verification in CI.
2025-10-31 02:00:40 +08:00
lin onetwo
9a6f3480f5
Feat/watch fs (#649)
* Add watch-filesystem-adaptor plugin and worker IPC

Introduces the watch-filesystem-adaptor TiddlyWiki plugin, enabling tag-based routing of tiddlers to sub-wikis by querying workspace info via worker thread IPC. Adds workerServiceCaller utility for worker-to-main service calls, updates workerAdapter and bindServiceAndProxy to support explicit service registration for workers, and documents the new IPC architecture. Updates wikiWorker and startNodeJSWiki to preload workspace ID and load the new plugin. Also updates the plugin build script to compile and copy the new plugin.

* test: wiki operation steps

* Add per-wiki labeled logging and console hijack

Introduces labeled loggers for each wiki, writing logs to separate files. Adds a logFor method to NativeService for logging with labels, updates interfaces, and hijacks worker thread console methods to redirect logs to main process for wiki-specific logging. Refactors workspaceID usage to workspace object for improved context.

* Update log handling for wiki worker and tests

Enhanced logging tests to check all log files, including wiki logs. Adjusted logger to write wiki worker logs to the main log directory. Updated e2e app script comment for correct usage.

* Enable worker thread access to main process services

Introduces a proxy system allowing worker threads to call main process services with full type safety and observable support. Adds worker-side service proxy creation, auto-attaches proxies to global.service, and updates service registration to use IPC descriptors. Documentation is added for usage and architecture.

* Update ErrorDuringStart.md

* chore: upgrade ipc cat and allow clean vite cache

* Refactor wiki worker initialization and service readiness

Moved wiki worker implementation from wikiWorker.ts to wikiWorker/index.ts and deleted the old file. Added servicesReady.ts to manage worker service readiness and callbacks, and integrated notifyServicesReady into the worker lifecycle. Updated console hijack logic to wait for service readiness before hijacking. Improved worker management in Wiki service to support detaching workers and notifying readiness.

* Refactor wiki logging to use centralized logger

Removed per-wiki loggers and console hijacking in favor of a single labeled logger. All wiki logs, including errors, are now written to a unified log file. Updated worker and service code to route logs through the main logger and removed obsolete log file naming and management logic.

* fix: ipc cat log error

* Refactor wiki test paths and improve file save logic

Updated test step to use wikiTestRootPath for directory replacements and added wikiTestRootPath to paths.ts for clarity. Improved error handling and directory logic in watch-filesystem-adaptor.ts, including saving tiddlers directly to sub-wiki folders, more informative logging, and ensuring cleanup after file writes is properly awaited.

* rename

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* feat: basic watch-fs

* feat: check file not exist

* refactor: use exponential-backoff

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* Initial commit when init a new git.

* fix: cleanup

* Refactor test setup and cleanup to separate file

Moved Before and After hooks from application.ts to a new cleanup.ts file for better organization and separation of concerns. Also removed unused imports and related code from application.ts. Minor type simplification in agent.ts for row parsing.

* test: modify and rename

* feat: enableFileSystemWatch

* refactor: unused utils.ts

* Update watch-filesystem-adaptor.ts

* refactor: use node-sentinel-file-watcher

* refactor: extract to two classes

* The logFor method lacks JSDoc describing the level parameter's

* Update startNodeJSWiki.ts

* fix: napi build

* Update electron-rebuild command in workflows

Changed the electron-rebuild command in release and test GitHub Actions workflows to use a comma-separated list for native modules instead of multiple -w flags. This simplifies the rebuild step for better-sqlite3 and nsfw modules.

* lint

* not build nsfw, try use prebuild

* Update package.json

* Update workerAdapter.ts

* remove subWikiPlugin.ts as we use new filesystem adaptor that supports tag based sub wiki

* fix: build

* fix: wrong type

* lint

* remove `act(...)` warnings

* uninstall chokidar

* refactor and test

* lint

* remove unused logic, as we already use ipc syncadaptor, not afriad of wiki status change

* Update translation.json

* test: increast timeout in CI

* Update application.ts

* fix: AI's wrong cleanup logic hidden by as unknown as

* fix: AI's wrong  as unknown as

* Update agent.feature

* Update wikiSearchPlugin.ts

* fix: A dynamic import callback was not specified.
2025-10-28 13:25:46 +08:00
lin onetwo
19ef74a4a6
Feat/mini window (#642)
* feat: new config for tidgi mini window

* chore: upgrade electron-forge

* fix: use 汉语 和 漢語

* feat: shortcut to open mini window

* test: TidGiMenubarWindow

* feat: allow updateWindowProperties on the fly

* fix: wrong icon path

* fix: log not showing error message and stack

* refactor: directly log error when using logger.error

* feat: shortcut to open window

* fix: menubar not closed

* test: e2e for menubar

* test: keyboard shortcut

* test: wiki web content, and refactor to files

* test: update command

* Update Testing.md

* test: menubar settings about menubarSyncWorkspaceWithMainWindow, menubarFixedWorkspaceId

* test: simplify menubar test and cleanup test config

* fix: view missing when execute several test all together

* refactor: use hook to cleanup menubar setting

* refactor: I clear test ai settings to before hook

* Add option to show title bar on menubar window

Introduces a new preference 'showMenubarWindowTitleBar' allowing users to toggle the title bar visibility on the menubar window. Updates related services, interfaces, and UI components to support this feature, and adds corresponding localization strings for English and Chinese.

* refactor: tidgiminiwindow

* refactor: preference keys to right order

* Refactor window dimension checks to use constants

Replaces hardcoded window dimensions with values from windowDimension and WindowNames constants for improved maintainability and consistency in window identification and checks.

* I cleanup test wiki

* Update defaultPreferences.ts

* test: mini window workspace switch

* fix: image broken by ai, and lint

* fix: can't switch to mini window

* refactor: useless todo

* Update index.ts

* refactor: reuse serialize-error

* Update index.ts

* Update testKeyboardShortcuts.ts

* refactor: dup logic

* Update ui.ts

* fix: electron-ipc-cat
2025-10-21 20:07:04 +08:00