Commit Graph
1398 Commits
Author SHA1 Message Date
Evan 3cacbd5fc1 Merge pull request #154 from metasequoiaime/dependabot/github_actions/actions-ebca16ef16
chore(deps): bump actions/cache/save from 4.3.0 to 6.1.0 in the actions group
2026-09-06 03:57:34 +09:00
dependabot[bot] 9d920d4f02 chore(deps): bump actions/cache/save in the actions group
Bumps the actions group with 1 update: [actions/cache/save](https://github.com/actions/cache).


Updates `actions/cache/save` from 4.3.0 to 6.1.0
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/0057852bfaa89a56745cba8c7296529d2fc39830...55cc8345863c7cc4c66a329aec7e433d2d1c52a9)

---
updated-dependencies:
- dependency-name: actions/cache/save
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-05 18:56:27 +00:00
Evan 4324009de4 Merge pull request #151 from metasequoiaime/chore/monorepo-consolidation
chore: consolidate the Windows product into one repository
2026-09-06 03:55:21 +09:00
Evan Hu 947aa16fcb fix(ci): persist vcpkg binaries before application builds 2026-09-06 03:39:07 +09:00
Evan Hu 9a9c6f328f fix(server): always answer explicit settings snapshot requests 2026-09-06 03:32:54 +09:00
Evan Hu 06bba15d4f fix(server): keep settings I/O off UI thread and bound dictionary rendering 2026-09-06 03:31:40 +09:00
Evan Hu b48dc82652 fix(ci): resolve the pipe probe contracts from the repository, not the server
The probe took its include directory from $ServerRoot/MetasequoiaImeEngine/contracts, which is where the engine sat when it was a submodule of Server. It is a submodule of the repository now, so the path does not move with -ServerRoot. A missing include directory is not a configure error, so this surfaced minutes later as C1083 on a header nobody had moved; the script now checks and says so before building.

The local packaging rehearsals had the same stale assumption, looking for MetasequoiaImeTsf, MetasequoiaImeServer and MetasequoiaImeUiHtml beside the installer. Worse, they skipped the build when a neighbour was absent, which in this layout means every build is skipped and whatever binaries are lying around get packaged into an installer you then run on your own machine. The three components are directories of this repository, so a missing one is now a hard failure, and Prepare-PackageFiles.ps1 is passed the directory names it needs.

Both were missed because the sweep that moved the submodules read its own output through head, so a truncated list looked like a complete one. Re-checked by resolving every relative path literal in every tracked file with no filtering.
2026-09-06 03:28:13 +09:00
Evan Hu b5d07f11eb fix(server): reduce WebView message and first-paint overhead 2026-09-06 03:05:36 +09:00
Evan Hu ecc1bf4f6b fix(server): point the panel resources at the ui component
The emoji, keyboard and handwriting panels embed the GUI framework's icon through a relative path that was written when msimeui was a submodule under server/. It now lives one level further out, at the repository root.

Found by the resource compiler rather than by the sweep that moved the submodules: that sweep matched CMake, JSON, PowerShell, Python, shell and YAML by extension, and .rc was not on the list. Re-checked by resolving every relative path literal in every tracked file regardless of extension; these three were the only ones left that did not resolve.
2026-09-06 03:04:00 +09:00
Evan Hu 6bb0c1e10e fix(ci): check out the engine submodule in the product inputs job
check-dictionary-contract.py compares scripts/dictionary_product.py against the engine's own copy, so the job needs the submodule's contents and not just its gitlink. The reusable workflow this job replaced checked out submodules; the rewrite dropped that.

The script reported a missing file as "differs from the pinned Engine contract", which describes a drift that had not happened and sends the reader looking for a content change. It now says the file is missing and how to get it.
2026-09-06 02:51:08 +09:00
Evan Hu 05036a763d docs: describe one repository instead of six
The product README was under windows/ after the move, but it was never a component readme: it is the download page, the feature guide and the contribution guide for the whole product, so it goes back to the root and windows/ gets a real component readme.

AGENTS.md at the root now carries the repository map, the component boundaries that used to be cross-repository rules, and the release process, since the scripts that process drives live at the root. The component files keep what is genuinely theirs and say which paths they are relative to. References that named sibling repositories now name sibling directories, and the lock documentation records that Server, the pages, the GUI framework and the installer are no longer inputs to pin.
2026-09-06 02:40:51 +09:00
Evan 4e68467f8b Merge pull request #149 from metasequoiaime/release-please--branches--main--components--MetasequoiaImeWindows
chore(main): release 0.1.0
2026-09-06 02:38:02 +09:00
Evan Hu 32e722c176 ci: build every component from the one checkout
The product lock existed because five repositories had to be pinned to reproduce one product. Four of them are directories now, so a commit of this repository already pins them and there is nothing left for the lock to say about them. What it still records is what the product consumes from outside: the engine submodule, the helpcodes and the dictionary release.

CI gains a job per component instead of a reusable workflow that checked out locked commits and rebuilt them. The release workflow no longer stages five sibling checkouts under historical names and no longer carries a second sparse checkout for its own scripts; Prepare-PackageFiles.ps1 already took the source directory names as parameters, so it is told the new ones, plus where the product-wide notice now lives.

Two checks the removed cross-repository pins used to provide are replaced in kind: the pages are verified against the engine submodule's web contract in CI rather than by locking UiHtml and Engine together, and the engine bump triage that Server carried moves here and now also says so when a bump leaves the lock behind.
2026-09-06 02:35:49 +09:00
github-actions[bot] 517f17d418 chore(main): release 0.1.0 2026-09-05 17:29:14 +00:00
Evan Hu 373f8d1473 refactor: collapse the duplicated submodules into one vendor/ directory
Windows, Server and UiHtml each carried their own gitlink to MSIME-Engine, all three pinned to the same commit, and Server carried a gitlink to MSIME-UI that is now the ui/ component. Git only reads the root .gitmodules, so the nested ones had to go regardless.

The engine and the two third-party dependencies now live once at vendor/MetasequoiaImeEngine, vendor/opencc and vendor/cpp-pinyin. Server reaches them through MSIME_VENDOR_DIR and builds ui/ as an out-of-tree subdirectory; the Windows tip's relative contract includes gained the extra level; the ui-html contract sync and the Server env/table generators follow the engine to its new location.
2026-09-06 02:27:52 +09:00
Evan Hu e10b1ca7f2 chore: fold TsfEditControl into the monorepo 2026-09-06 02:24:40 +09:00
Evan Hu 5da9835deb chore: fold MetasequoiaImeLog into the monorepo 2026-09-06 02:24:40 +09:00
Evan Hu 2f6d278f79 chore: fold MSIME-Installer into the monorepo 2026-09-06 02:24:40 +09:00
Evan Hu b267a60981 chore: fold MSIME-UiHtml into the monorepo 2026-09-06 02:24:39 +09:00
Evan Hu 18027e7126 chore: fold MSIME-UI into the monorepo 2026-09-06 02:24:39 +09:00
Evan Hu cf5d4a4d50 chore: fold MSIME-Server into the monorepo 2026-09-06 02:24:39 +09:00
Evan Hu 253b068984 refactor: move the Windows TSF frontend under windows/
Preparation for folding Server, UI, UiHtml, Installer, ImeLog and TsfEditControl into this repository. The Windows tip's own sources, build files and local build scripts move under windows/ so every component sits at the same level. Product-level files stay at the root: the lock, the release manifest, the shared CI scripts, the integration tests, the docs and the Engine submodule.
2026-09-06 02:24:27 +09:00
Evan a13ae2fdbe Merge pull request #100 from PathGao/fix/86-bare-modifier-keyup-reaches-host
fix(tsf): let the host see the bare Ctrl release that toggles input mode
2026-09-06 02:10:48 +09:00
Evan e08f434e31 Merge pull request #148 from metasequoiaime/architecture/product-contracts
feat(product): validate and lock the shared-session release combination
2026-09-06 01:54:16 +09:00
Evan a3610b7180 Merge pull request #150 from metasequoiaime/houko/fix-inno-language-path
fix(release): 语言文件装到真正的 Inno Setup 目录,修掉八个版本都卡住的打包失败
2026-09-06 01:54:09 +09:00
Evan a8190c809e Merge pull request #4 from metasequoiaime/architecture/product-contracts
fix(packaging): ship and verify the shared WebView runtime
2026-09-06 01:53:30 +09:00
Evan 0584856a92 Merge pull request #6 from metasequoiaime/architecture/product-contracts
chore(boundaries): guard the reusable GUI library against product dependencies
2026-09-06 01:53:20 +09:00
Evan 42719eeb1b Merge pull request #7 from metasequoiaime/architecture/product-contracts
fix(contracts): use the shared candidate and WebView message contract
2026-09-06 01:53:10 +09:00
Evan b035527874 Merge pull request #33 from metasequoiaime/architecture/product-contracts
refactor(session): share input composition and candidate presentation
2026-09-06 01:53:01 +09:00
Evan Hu 831b828d00 refactor(ci): move the Inno Setup language check into scripts/ci
Every other piece of shell in these workflows lives in scripts/ci and the workflow only wires it up. The language probe went in inline, so it did not: twenty lines of PowerShell building an .iss heredoc inside a YAML block scalar, which is the least reviewable and least runnable place to put it.

Same check, now in check-inno-language.ps1, and runnable by hand on a Windows machine. It falls back to the system temp directory when RUNNER_TEMP is unset so that running it outside CI works.
2026-09-06 01:37:20 +09:00
Evan Hu 7c6dc8b6a0 fix(release): install the Inno Setup language file where ISCC looks
Every release build since the packaging pipeline landed has failed at "Compile the installer", which is why the last eight versions are still unpublished drafts:

    Error on line 63 in msime_setup.iss: Couldn't open include file
    "c:\program files (x86)\inno setup 6\Languages\ChineseSimplified.isl"

install-inno-language.ps1 derived the destination from `Get-Command ISCC.exe`. On the windows-2025 image Inno Setup comes from Chocolatey, so that resolves to the shim at C:\ProgramData\Chocolatey\bin\ISCC.exe and the file was written to C:\ProgramData\Chocolatey\bin\Languages\. ISPP resolves compiler: against the real installation. The step printed "Installed ... (21516 bytes)" and exited 0, and the build failed two steps later pointing at a path nothing had written to, which is why this survived eight releases.

The installation is now located by a file only it has -- ISPPBuiltins.iss or Default.isl, neither of which sits beside a shim -- checking the uninstall registry key, the two Program Files locations and any ISCC.exe on PATH, and failing with the list it tried rather than falling back to a guess.

ci.yml now compiles a throwaway script whose only content is a [Languages] entry pointing at compiler:Languages\ChineseSimplified.isl. Asserting the file exists at a path this script computed would only restate the script's own belief; compiling is what proves ISCC agrees. The URL and digest pin moved into the script so that check does not need a second copy of them.
2026-09-06 01:37:13 +09:00
Evan 33728853dc Merge pull request #34 from metasequoiaime/fix/clipboard-surrogate-truncation
Do not truncate a clipboard entry mid surrogate pair
2026-09-06 01:37:02 +09:00
Evan Hu ce2aa1a329 chore(product): lock final composition consumers and current installer 2026-09-06 01:35:30 +09:00
Evan Hu f31084162a chore(deps): pin verified partial-composition flush semantics 2026-09-06 01:34:33 +09:00
Evan Hu 0c734891a1 chore(deps): pin verified partial-composition flush semantics 2026-09-06 01:34:33 +09:00
Evan Hu 033afa437a chore(product): lock consumers to the shared composition engine 2026-09-06 01:31:29 +09:00
Evan Hu c0866292fd chore(deps): pin the shared portable composition contract 2026-09-06 01:30:07 +09:00
Evan Hu 984870ea29 chore(deps): pin the shared portable composition contract 2026-09-06 01:30:06 +09:00
Evan Hu 448366d9c6 Merge origin/main into architecture/product-contracts
Prepare-PackageFiles.ps1 conflicted because both sides changed the block that builds the source paths. The resolution keeps both: the source directory names stay parameters with the historical defaults, and dictionary-manifest.json is addressed through the dictionary parameter like every other path in that block. Both new assertions are kept, for the shared WebView contracts and for the third-party notices.

tests/package-files.ps1 needed two additions, because main added an input this branch's fixture did not know about. The fixture now writes MetasequoiaImeTsf/THIRD_PARTY_NOTICES.txt, without which the new assertion would fail the test that this branch introduced, and the packaged-output check now also looks for it, so the file being dropped from the payload is caught rather than only its absence from the source tree.
2026-09-06 01:16:43 +09:00
Evan 05d6b88356 Merge pull request #5 from metasequoiaime/chore/clipboard-history-opt-in
Ship clipboard history off by default
2026-09-06 01:10:16 +09:00
Evan Hu 1f126a193a fix(product): pin Server with corrected subproject test registration 2026-09-06 01:07:08 +09:00
Evan Hu 3a6688d38f chore(config): ship clipboard history off by default
Clipboard history records what the user copies. A feature that retains user data belongs behind an opt-in rather than being on the moment the input method is installed, and that is the stance this project already takes elsewhere: MSIME-Linux's PRIVACY.md says voice transcription is disabled by default and runs only when asked for.

MSIME-Linux already defaults it off. This is the only one of the input defaults that diverged where the Windows value is the one that changes; the other four are moving the other way, in metasequoiaime/MSIME-Linux#56.

Existing installations are unaffected. msime_setup.iss generates config.toml with onlyifdoesntexist, so this only changes what a fresh install starts with, and anyone who has already turned it on keeps it on.

The three values Prepare-PackageFiles.ps1 asserts about this file — schema, theme_mode and diagnostic_log — are unchanged.
2026-09-06 01:06:02 +09:00
Evan Hu 920a4bf4e9 fix(build): keep standalone GUI tests out of the Server test registry 2026-09-06 01:05:44 +09:00
Evan Hu 0f1ffb4343 fix(clipboard): do not truncate a clipboard entry mid surrogate pair
NormalizeClipboardText caps an entry at kMaxChars with text.resize(). wchar_t is UTF-16 on Windows, so that cap counts code units, and a cut landing between a high and low surrogate leaves a lone high surrogate. The result is not valid UTF-16, and it is what gets serialised into the history store and read back.

It takes a non-BMP character — an emoji, or a supplementary-plane Han character, both of which this IME can produce — sitting exactly at the boundary. The entry then carries an unpaired surrogate for as long as it stays in the history.

The cut now steps back one unit when it would split a pair, dropping the incomplete character instead of half of it. Entries that do not end on a surrogate are unaffected.

MSIME-Linux does not have this: its normalize() truncates with g_utf8_offset_to_pointer, which is codepoint aware. The two implementations otherwise agree exactly, including kMaxItems, kMaxChars and the promote-to-front policy.
2026-09-06 01:03:50 +09:00
Evan Hu 56db4efc8f test(product): validate the locked installer full and light package contents 2026-09-06 00:55:22 +09:00
Evan 651ce6196d Merge pull request #146 from metasequoiaime/houko/manual-release
ci(release): 发布改为手动触发,不再由合并 main 自动签名
2026-09-06 00:54:14 +09:00
Evan 527efb564a Merge pull request #147 from metasequoiaime/houko/revert-calver
Move back off calendar versioning
2026-09-06 00:53:40 +09:00
Evan Hu edebf3f76a Merge remote-tracking branch 'origin/main' into architecture/product-contracts 2026-09-06 00:53:27 +09:00
Evan Hu 1c6c956530 feat(product): lock the shared-session stack and validate dictionary formats 2026-09-06 00:53:26 +09:00
Evan Hu 07d9ce91e5 revert: move back off calendar versioning
Reverts the switch to calendar versioning, before it produced a release here.

release-please has no CalVer strategy, so the switch reset the version series by hand and pinned always-bump-patch. What that analysis missed is what release-please does to the changelog when the series it is walking no longer connects to the tag history: on MSIME-Apple it rewrote the whole file into a single 158-line 2026.9.1 entry that listed every feature since the first pull request as though it had just shipped. MSIME-Linux got a 64-line one. This repository had not released yet, so there is no changelog damage to undo and reverting now costs nothing.

Restores the 0.0.17 baseline across version.txt, .release-please-manifest.json and the version resource, drops always-bump-patch from the release-please config, and removes the monthly rollover workflow. The next release goes back to the previous series.

The three version lines the switch was meant to unify stay unaligned. That problem is real but wants a mechanism that does not fight release-please.
2026-09-06 00:51:32 +09:00