diff --git a/README.md b/README.md
index 1c35c28..53274af 100644
--- a/README.md
+++ b/README.md
@@ -133,25 +133,29 @@ See also [a list of milestones][milestones].
### v0.2.0 (Beta) - Released
-* :nest_with_eggs: [Basic option (at minimum, the port of the GhostText server)](https://github.com/exteditor/ghostbird/issues/3)
-* :nest_with_eggs: [Prepare for i18n (Make texts translatable)](https://github.com/exteditor/ghostbird/issues/4)
+* :white_check_mark: [Basic option (at minimum, the port of the GhostText server)](https://github.com/exteditor/ghostbird/issues/3)
+* :white_check_mark: [Prepare for i18n (Make texts translatable)](https://github.com/exteditor/ghostbird/issues/4)
### v0.2.1 (Beta) - Released
-* :nest_with_eggs: [Fix empty host field being sent to the server](https://github.com/exteditor/ghostbird/issues/22)
+* :white_check_mark: [Fix empty host field being sent to the server](https://github.com/exteditor/ghostbird/issues/22)
-### v0.3.0 (Beta) - Current
+### v0.3.0 (Beta) - Released
* :nest_with_eggs: [Show notifications](https://github.com/exteditor/ghostbird/issues/24)
+* :nest_with_eggs: [Continue i18n (Add more languages)](https://github.com/exteditor/ghostbird/issues/26)
+
+### v0.4.0 (Beta) - Current
+
+* :nest_with_eggs: [Add a way to disconnect using only a mouse](https://github.com/exteditor/ghostbird/issues/30)
-### v0.4.0 (Beta) - 2025 Q4
+### v0.5.0 (Beta) - 2025 Q4
-* :construction: [Add a way to disconnect using only a mouse](https://github.com/exteditor/ghostbird/issues/30)
+* :construction: [Edit a HTML email as if it were a plain text email](https://github.com/exteditor/ghostbird/issues/6)
### v0.x.x (Beta) - 2025 Q4
* :construction: [Website with some screenshots](https://github.com/exteditor/ghostbird/issues/5)
-* :construction: [Edit a HTML email as if it were a plain text email](https://github.com/exteditor/ghostbird/issues/6)
### v1.0.0 (Stable) - 2026 Q2
@@ -160,7 +164,6 @@ See also [a list of milestones][milestones].
### v1.x.x (Stable) - 2026 Q4
* :white_large_square: [Edit Address and Subject fields](https://github.com/exteditor/ghostbird/issues/8)
-* :nest_with_eggs: [Continue i18n (Add more languages)](https://github.com/exteditor/ghostbird/issues/26)
* :white_large_square: [Support text editors that lack a GhostText add-on (e.g., Notepad)*](https://github.com/exteditor/ghostbird/issues/25)
> \*Requires protocol extension and server-side support. I intend to develop one by forking [GhostText-Any](https://github.com/newsch/GhostText-Any/).
@@ -184,7 +187,7 @@ See also [a list of milestones][milestones].
If you like the idea, please:
-* [Star the repo](#repository-container-header).
+* [Star the repo](https://github.com/exteditor/ghostbird/#repository-container-header).
* [Rate the add-on][review].
* Feel free to open issues and submit pull requests. See [CONTRIBUTING.md](./CONTRIBUTING.md) to get started.
* See our [milestones page][milestones] or [issues](https://github.com/exteditor/ghostbird/issues) for tasks you can contribute to, and use the [Discussions](https://github.com/exteditor/ghostbird/discussions) page for general discussions.
@@ -232,7 +235,7 @@ We need help with:
Please consider the following options:
-* [Star the repo](#repository-container-header)
+* [Star the repo](https://github.com/exteditor/ghostbird/#repository-container-header)
* [Rate the add-on][review]
* [Donate to Thunderbird](https://www.thunderbird.net/en-US/donate/) (It's financially separate from Firefox)
* [Donate to @fregante, the author of the original GhostText](https://github.com/sponsors/fregante)
@@ -261,6 +264,7 @@ If you've looked at the options above and still want to motivate the maintainer
[](https://github.com/exteditor/ghostbird/actions/workflows/build.yml)
[](https://github.com/search?q=repo%3Aexteditor%2Fghostbird&type=pullrequests&s=created&o=desc)
[](https://app.codecov.io/github/exteditor/ghostbird/commits)
+[](https://deepwiki.com/exteditor/ghostbird)
## License
diff --git a/doc/design.md b/doc/design.md
index 6687be9..29222ca 100644
--- a/doc/design.md
+++ b/doc/design.md
@@ -174,7 +174,7 @@ This is how user actions are handled:
* [Barrelsby](https://github.com/bencoveney/barrelsby) generates `index.ts`.
* See [building.md](./building.md) for details on build script internals.
-## Structure of the code
+## Structure of the code
The code loosely follows the [Ports and Adapters architecture](https://8thlight.com/insights/a-color-coded-guide-to-ports-and-adapters) and adheres to the [Dependency Inversion Principle](https://en.wikipedia.org/wiki/Dependency_inversion_principle).
* Interface implementations are preferred over class inheritance.
diff --git a/doc/faq.md b/doc/faq.md
index ff0c6c2..0a13543 100644
--- a/doc/faq.md
+++ b/doc/faq.md
@@ -42,7 +42,7 @@
* Try searching the GitHub pages like [discussion][discussion], [wiki][wiki], and [issue][issue] pages. Please post to the [discussion][discussion] or [issue][issue] page if you don't find anything relevant.
-### How do I switch between HTML mode and Plain Text mode?
+### How do I switch between HTML mode and Plain Text mode?
> TL;DR: Set your preferred format in `Account Settings`>`Composition & Addressing`, then start a new message.
@@ -71,7 +71,7 @@
* As for the icon, I'm planning to add an option to choose between icons so that you can switch them. Please upvote [the issue][chooseicon] if it bothers you.
* New icons are welcome, of course, preferably in SVG.
-### Why not just fork the original GhostText add-on, or contribute to it?
+### Why not just fork the original GhostText add-on, or contribute to it?
* I have a specific requirement to extend [the GhostText protocol][protocol] on both the client and server sides, which would allow configuration made in the client UI to be sent to the server. I think the original add-on, which is supposed to be simple, is not suitable for that purpose.
* Thunderbird-specific changes also seem hard to incorporate without complicating the code. For example, the concepts of a compose window and address lines do not exist in browsers.
diff --git a/src/util/time.ts b/src/util/time.ts
index 6924a79..0c8fbc0 100644
--- a/src/util/time.ts
+++ b/src/util/time.ts
@@ -1,7 +1,9 @@
-export interface Disposable {
- [Symbol.dispose]: () => void
-}
-
+/**
+ * Starts a timer and returns a Disposable that logs the elapsed time when disposed. Intended to use it with `using` statements.
+ *
+ * @param label Text used as the message label when logging the elapsed time
+ * @returns A Disposable which logs the elapsed time in milliseconds when disposed
+ */
export function time(label: string): Disposable {
const start = performance.now()
return {
diff --git a/tools/tsdown_path.ts b/tools/tsdown_path.ts
index cd424d7..173d106 100644
--- a/tools/tsdown_path.ts
+++ b/tools/tsdown_path.ts
@@ -26,12 +26,12 @@ export function makeRelativeSourcePath(relativeSourcePath: string): string {
// For release builds, we strip the path to make it easier to navigate in Thunderbird devtools
let libPath = findPrefix("/node_modules/", relativeSourcePath)
if (libPath) {
- return libPath.slice(1)
+ return `.${libPath}`
}
let srcPath = findPrefix("/src/", relativeSourcePath)
if (srcPath) {
// Make it relative to the root
- return `../${srcPath.slice(1)}`
+ return `..${srcPath}`
}
throw Error(`unexpected source path: ${relativeSourcePath}`)
}