chore(release): v0.1.2

Version bump via changesets.
This commit is contained in:
gsxdsm
2026-04-24 00:39:37 -07:00
parent 11c04f0c43
commit 2f76dea35f
8 changed files with 67 additions and 17 deletions

View File

@@ -1,5 +0,0 @@
---
"@runfusion/fusion": patch
---
Add a `planning-awaiting-input` ntfy notification event so users can opt in to alerts when planning sessions pause for user input.

View File

@@ -1,5 +0,0 @@
---
"@runfusion/fusion": patch
---
Improve dashboard shutdown observability by logging non-fatal diagnostics when `CentralCore.close()` fails during dispose, normal signal shutdown, or dev-mode shutdown cleanup.

View File

@@ -1,5 +0,0 @@
---
"@runfusion/fusion": patch
---
Route dashboard runtime diagnostics through the shared injected runtime logger so TTY sessions can capture server/package logs in the TUI while preserving readable non-TTY startup banner output.

View File

@@ -1,5 +1,16 @@
# runfusion.ai # runfusion.ai
## 0.1.2
### Patch Changes
- Updated dependencies [9bf2981]
- Updated dependencies
- Updated dependencies [94473c8]
- Updated dependencies
- Updated dependencies [c01892d]
- @runfusion/fusion@0.1.2
## 0.1.1 ## 0.1.1
Catch-up version bump so `runfusion.ai` stays in sync with `@runfusion/fusion`. The two packages are now grouped under changesets `fixed` in `.changeset/config.json` and will always share a version number from here on. Catch-up version bump so `runfusion.ai` stays in sync with `@runfusion/fusion`. The two packages are now grouped under changesets `fixed` in `.changeset/config.json` and will always share a version number from here on.

View File

@@ -1,6 +1,6 @@
{ {
"name": "runfusion.ai", "name": "runfusion.ai",
"version": "0.1.1", "version": "0.1.2",
"license": "MIT", "license": "MIT",
"description": "Launch Fusion with `npx runfusion.ai` — tiny alias for @runfusion/fusion.", "description": "Launch Fusion with `npx runfusion.ai` — tiny alias for @runfusion/fusion.",
"homepage": "https://runfusion.ai", "homepage": "https://runfusion.ai",

View File

@@ -1,5 +1,15 @@
# @runfusion/fusion # @runfusion/fusion
## 0.1.2
### Patch Changes
- 9bf2981: Add a `planning-awaiting-input` ntfy notification event so users can opt in to alerts when planning sessions pause for user input.
- Fix the CLI init command import path for the Claude skills runner so tsup can resolve it during build.
- 94473c8: Improve dashboard shutdown observability by logging non-fatal diagnostics when `CentralCore.close()` fails during dispose, normal signal shutdown, or dev-mode shutdown cleanup.
- Fix dashboard and serve command plugin store initialization to support task store implementations that expose `getFusionDir()` without `getRootDir()`.
- c01892d: Route dashboard runtime diagnostics through the shared injected runtime logger so TTY sessions can capture server/package logs in the TUI while preserving readable non-TTY startup banner output.
## 0.1.1 ## 0.1.1
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@runfusion/fusion", "name": "@runfusion/fusion",
"version": "0.1.1", "version": "0.1.2",
"license": "MIT", "license": "MIT",
"description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.", "description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.",
"homepage": "https://github.com/Runfusion/Fusion#readme", "homepage": "https://github.com/Runfusion/Fusion#readme",

View File

@@ -7906,6 +7906,50 @@ Task with acceptance criteria
} }
}); });
it("logs outer promise-chain failure when inner warning logger throws", async () => {
const syntheticError = "Synthetic warn logger failure";
// Throw inside warn logging so the failure escapes the inner summarize try/catch
// and is handled by the outer Promise.resolve().then(...).catch(...) branch.
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {
throw new Error(syntheticError);
});
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
const mockOnSummarize = vi.fn().mockRejectedValue(new Error("AI service failed"));
try {
const task = await store.createTask(
{ description: "a".repeat(201) },
{ onSummarize: mockOnSummarize, settings: { autoSummarizeTitles: true } }
);
expect(task.id).toMatch(/^FN-\d+$/);
expect(task.title).toBeUndefined();
await new Promise((resolve) => setTimeout(resolve, 10));
const updatedTask = await store.getTask(task.id);
expect(updatedTask.title).toBeUndefined();
const outerErrorCall = errorSpy.mock.calls.find(([message]) =>
typeof message === "string"
&& message.includes("[task-store] Unexpected title summarization promise-chain failure")
);
expect(outerErrorCall).toBeDefined();
const [message, context] = outerErrorCall as [string, Record<string, unknown>];
expect(message).toContain("[task-store] Unexpected title summarization promise-chain failure");
expect(context).toMatchObject({
taskId: task.id,
descriptionLength: 201,
autoSummarizeEnabled: true,
error: syntheticError,
});
} finally {
warnSpy.mockRestore();
errorSpy.mockRestore();
}
});
it("should trigger summarization at exactly 201 characters", async () => { it("should trigger summarization at exactly 201 characters", async () => {
const boundaryDescription = "a".repeat(201); const boundaryDescription = "a".repeat(201);
const mockOnSummarize = vi.fn().mockResolvedValue("AI Title"); const mockOnSummarize = vi.fn().mockResolvedValue("AI Title");