Commit graph

2916 commits

Author SHA1 Message Date
lin onetwo
51051daea4 test(e2e): verify browser view re-renders restored checkpoint content
- Add browser view verification step to checkpoint E2E test
- Restore missing WorkspaceSearchResultsView and workspaceSettingsSchema files
- Confirm TiddlyWiki syncer → UI update pipeline works correctly
- Test passes with retry logic (8 attempts × 200ms = 1.6s)
2026-04-22 18:52:08 +08:00
lin onetwo
8183bb1e7c feat(git): implement shadow-repo checkpoint feature (create/list/restore)
Implement Cline-style checkpoint functionality using detached git directory:
- Shadow checkpoint repository with metadata file for labels
- Create checkpoint: git write-tree + metadata storage
- List checkpoints: read from metadata JSON
- Restore checkpoint: direct file writes to avoid watcher deletion events
- UI in GitLog panel with checkpoint list and restore buttons
- E2E test coverage for checkpoint scenario

Fixes window recreation issue by using recreateUnlessWorkspaceID
Excludes $:/StoryList from restore to preserve UI state
2026-04-22 18:04:47 +08:00
lin onetwo
54b1f0ba1a feat(git): add shadow-repo checkpoint support (create/list/restore)
Implements Cline-style checkpoint functionality:

- Desktop: shadow checkpoint repo via dugite, service APIs, GitLog UI actions

- Mobile: matching checkpoint primitives in isomorphic-git GitService

- Shared: IGitCheckpointInfo data model across both platforms

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:07:30 +08:00
lin onetwo
7eadc16f41 refactor(preferences): normalize line endings in DeveloperTools
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
a40bf17a43 chore(build): normalize line endings in build config files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
fa526ada6d refactor(windows): normalize line endings in RemoteTerminal and Subscription files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
c3a698e934 refactor(preferences): normalize line endings in ToolPermissions and TiddlyWiki files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
0b9acf2b74 refactor(preferences): normalize line endings in ExternalAPI files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
b9920a0acf refactor(preferences): normalize line endings in Preferences files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
6082fe0079 refactor(windows): normalize line endings in NodeManagement files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
30f1e3ab34 refactor(windows): normalize line endings in window files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
b9d0b190f8 refactor(services): normalize line endings in wiki and tool permission files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
69e6894d12 refactor(services): normalize line endings in tool and service identifier files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
33e7bc7e57 refactor(services): normalize line endings in remote and provider files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
52e8203e91 refactor(preferences): normalize line endings in preferences files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
478cf40d78 refactor(memeloopNode): normalize line endings in memeloopNode test files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
59979cd95a refactor(services): normalize line endings in libs and memeloopNode files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:39 +08:00
lin onetwo
4f96b31336 refactor(services): normalize line endings in misc service files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
c4437f512d refactor(agentInstance): normalize line endings in agent instance files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
f3eca3e0b4 refactor(services): normalize line endings in agent service files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
51c8f95dd3 refactor(preload): normalize line endings in preload files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
3446e7b0b2 refactor(pages): normalize line endings in page files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
f32475c51c chore(main): normalize line endings in main entry files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
b0839b5ee7 chore(constants): normalize line endings in constants files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
8504f18b65 refactor(components): normalize line endings in component files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
659922f07c chore(tests): normalize line endings in test mocks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
3888e35fdf chore(shared): normalize line endings in tidgi-shared package
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
a1bac31372 feat(providerRegistry): add debug logging for SiliconFlow
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
fd496205b3 build(package): add E2E test script
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:38 +08:00
lin onetwo
21e9677674 build(scripts): update E2E app startup script
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:31 +08:00
lin onetwo
28d06ea397 test(e2e): normalize line endings in support files
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:31 +08:00
lin onetwo
3c0a9f88ac test(e2e): add SiliconFlow and debug step definitions
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:31 +08:00
lin onetwo
11944a0b67 test(e2e): add log entry step definition
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:31 +08:00
lin onetwo
b34f3c4245 test(e2e): add checkbox step definition
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:30 +08:00
lin onetwo
77dab84b29 test(e2e): add SiliconFlow debug feature file
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:07 +08:00
lin onetwo
bd5b7f78d2 chore(.gitattributes): normalize line endings
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:06 +08:00
lin onetwo
0ff5fa9134 test(e2e): verify cloud-discovered remote node workflow
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:00 +08:00
lin onetwo
0d5fc7f268 feat(node-management): add cloud login and connect UI
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:00 +08:00
lin onetwo
279664b019 feat(node-management): add cloud discovery service contract
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:00 +08:00
lin onetwo
dcc767caa5 test(e2e): verify remote agent task through workspace
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:06:00 +08:00
lin onetwo
3938f9320a test(e2e): add remote memeloop node fixture lifecycle
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:05:59 +08:00
lin onetwo
aad61bc93a fix(desktop): normalize memeloop worker noise keys
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:05:51 +08:00
lin onetwo
66e6dfa5d5 build(desktop): package native memeloop runtime deps
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
2026-04-22 09:05:51 +08:00
lin onetwo
af50223cff fix(node-management): unify translation keys and ui layout parameters 2026-04-22 09:05:51 +08:00
lin onetwo
a6b1036ab7 feat(preferences): restructure AI models and node management UI
- Moved default model selection to a dedicated 'AIModels' (默认模型) section.
- Renamed 'External API' to 'Service Providers' (服务提供商).
- Converted Node Management custom items into generic schema items (action, action-input).
- Eliminated NodeManagementItem custom component, instead rendering dynamic data through Native message box alerts.
- Fixed UI overflow of 'Get API Key'/Login button in ProviderPanel using FlexShrink and precise margin alignments.
2026-04-22 09:05:50 +08:00
lin onetwo
36c97cf055 refactor(preferences): allow searching custom items and improve Node Management UI
- Removed the hardcoded exclusion of \item.type === 'custom'\ from \PreferenceSearchResultsView.tsx\. Now any valid custom item is automatically indexed and searchable.
- Added multiple custom items to \iAgent.ts\ schema (\NodeIdentity\, \KnownNodes\, \ConnectPeer\, \SyncStatus\, \RemoteWikis\) pointing to \iAgent.nodeManagement\ componentId so they show in search.
- Cleaned up \NodeManagementItem.tsx\ to use standard \Box\ layouts instead of separated \Paper\ cards, making it seamlessly integrate with the surrounding \AIAgent\ section.
- Moved the browser login/Get API key button in \ProviderPanel.tsx\ inline beside the API Key text field (using a flex box) to make it more obvious. Added conditional \mt\ to balance heights.
2026-04-22 09:05:42 +08:00
lin onetwo
b81c2e5dbd fix(provider): re-hydrate loginUrl/apiKeyUrl from defaultProviders at read time
Root cause: getAIProviders() returns stored providers from DB which never
include loginUrl/apiKeyUrl (these fields exist only in defaultProviders.ts
source code, not persisted). ProviderPanel checks provider.loginUrl and
provider.apiKeyUrl to show the 'Login in Browser'/'Get API Key' buttons,
so the buttons were never visible.

Fix: merge loginUrl/apiKeyUrl from defaultProviders back into stored
providers inside getAIProviders() -- only fills in if not already set,
so user overrides are respected.

Also: add check:i18n to CI (test.yml) and package.json scripts, update
check-i18n-dups.mjs to exit 1 on duplicates so CI fails properly.
2026-04-22 09:05:33 +08:00
lin onetwo
45d5f6d64e fix(i18n+ui): resolve duplicate JSON keys, fix NodeManagement not rendering
JSON duplicate key fixes (found by scripts/check-i18n-dups.mjs):
- en/agent.json: remove duplicate ToolApprovalSettings/Description,
  ToolPermissions/Description (second occurrence at line 301-304)
- zh-Hans/agent.json: same 4 duplicates + duplicate WikiEmbed block at EOF

NodeManagement rendering fix:
- aiAgent section has CustomSectionComponent (AIAgent.tsx) which takes
  priority over schema items, so the 'custom' schema item NodeManagement
  was never actually rendered -- schema-based search indexing still works
- Fix: import NodeManagementItem into AIAgent.tsx and render it directly
  after the delete-database dialog, with Divider + SectionTitle header

Add scripts/check-i18n-dups.mjs: precise same-level duplicate key detector
using a JSON string parser (handles escape sequences and nested objects
correctly, unlike naive regex approach)
2026-04-22 09:05:33 +08:00
lin onetwo
cd4c72b8c3 fix(i18n): remove ProviderSettings duplicate UI + clean dead translation keys
- Delete ProviderSettings.tsx: it rendered a redundant custom-provider table
  (with its own add/edit/delete) that duplicated the functionality already
  provided by ProviderConfig with its Tab UI. The table was the source of
  the confusing '暂无自定义提供商' empty-state message.
- Remove ProviderSettings import and usage from ExternalAPI/index.tsx
- Remove dead/duplicate keys from Preference block in en+zh-Hans agent.json:
  ManageSubscription, MemeloopAPIKey, MemeloopAPIKeyHelp, MemeloopSubscription,
  NoCustomProviders, CustomProviders, SaveSubscriptionMode, SelfHostedMode,
  SelfHostedModeDescription, SubscriptionActiveUntil, SubscriptionInfo,
  SubscriptionMode, SubscriptionModeDescription, Status (ProviderSettings-only),
  duplicate Save and Saving keys
- ProviderNameCannotBeChanged and ProviderNameHelp kept (used in ProviderFormDialog)
2026-04-22 09:05:33 +08:00
lin onetwo
b4f12b2cd9 refactor(prefs): i18n AIAgent + extract NodeManagement to schema custom item
- Replace all hardcoded English strings in AIAgent.tsx with t() calls:
  Tool Approval, Tool Permissions, scheduled task dialog labels,
  table column headers, schedule description strings
- Add 30+ translation keys to en/agent.json and zh-Hans/agent.json covering
  all scheduled task UI strings
- Extract NodeManagementSection + sub-panels (Identity, KnownNodes, SyncStatus,
  AddPeer, RemoteWikiList) from AIAgent.tsx into
  customItems/NodeManagementItem.tsx with ICustomItemProps interface
- Register 'aiAgent.nodeManagement' custom item in registerCustomSections.tsx
- Add 'custom' schema item to aiAgent.ts with titleKey/descriptionKey so
  search index can find '节点管理 / Node Management' and its description
- Add loginUrl field to AIProviderConfig interface
- Add loginUrl and apiKeyUrl to memeloop (browser login) and siliconflow
  (referral https://cloud.siliconflow.cn/i/AwRxPUi7) in defaultProviders
- Add 'Login in Browser' / 'Get API Key' button in ProviderPanel using
  window.service.native.openURI for external browser open
- Add WikiSync.NodeManagementDescription translation key (en + zh-Hans)
2026-04-22 09:05:33 +08:00