@runfusion/fusion 0.40.1 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +44240 -41922
- package/dist/client/.vite/manifest.json +75 -75
- package/dist/client/assets/AgentDetailView-C5Lb3fd3.js +18 -0
- package/dist/client/assets/AgentDetailView-DiWELtb1.css +1 -0
- package/dist/client/assets/{AgentPermissionPolicyEditor-BP6d1LFG.js → AgentPermissionPolicyEditor-DtRcvE6M.js} +2 -2
- package/dist/client/assets/{AgentsView-COx3draV.js → AgentsView-BVW-NOYD.js} +3 -3
- package/dist/client/assets/ChatView-Dy-oIkrK.js +6 -0
- package/dist/client/assets/{DevServerView-DXQ1LX4H.js → DevServerView-DLsFSP4s.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-B_8ICSPl.js → DirectoryPicker-_QawX-uL.js} +1 -1
- package/dist/client/assets/{DocumentsView-DmNB9rJZ.js → DocumentsView-DierUJsj.js} +1 -1
- package/dist/client/assets/{EvalsView-72w3_AO6.js → EvalsView-B83lYKQl.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-Be4oaohM.js → ExperimentalAgentOnboardingModal-CTctYTPU.js} +1 -1
- package/dist/client/assets/{GoalsView-DkEXO_mx.js → GoalsView-CKn8i0i0.js} +1 -1
- package/dist/client/assets/{InsightsView-_-wd4BOJ.js → InsightsView-EpRHCD8G.js} +1 -1
- package/dist/client/assets/{MemoryView-BOCIc8HT.js → MemoryView-Df_ocTc5.js} +2 -2
- package/dist/client/assets/NodesView-DF7xJ_3z.js +14 -0
- package/dist/client/assets/{PiExtensionsManager-BqaI9GKX.js → PiExtensionsManager-BOooOEDx.js} +2 -2
- package/dist/client/assets/{PluginManager-DYaVwsXd.js → PluginManager-CHrDAzK6.js} +1 -1
- package/dist/client/assets/{PullRequestView-Dk9a7jRZ.js → PullRequestView-CJU21OZ6.js} +2 -2
- package/dist/client/assets/{ReliabilityView-B-i5SOoD.js → ReliabilityView-uHkW1Qeu.js} +1 -1
- package/dist/client/assets/{ResearchView-C2Gx8jC9.js → ResearchView-oZ2-vbjL.js} +1 -1
- package/dist/client/assets/{SecretsView-Db2HAGi2.js → SecretsView-BpkqSV_E.js} +1 -1
- package/dist/client/assets/SessionTerminal-D9IW4cDj.js +2 -0
- package/dist/client/assets/{SettingsModal-B-d30TVy.js → SettingsModal-BmB5l2bA.js} +1 -1
- package/dist/client/assets/SettingsModal-C8gsAazm.js +31 -0
- package/dist/client/assets/{SetupWizardModal-Cw3RdN83.js → SetupWizardModal-BYLEU_7o.js} +1 -1
- package/dist/client/assets/{SkillsView-BGyynaI4.js → SkillsView-8GgQ8Z_Z.js} +1 -1
- package/dist/client/assets/{StashRecoveryView-CFaU-hym.js → StashRecoveryView-CT1t1Uf2.js} +1 -1
- package/dist/client/assets/{TodoView-Djjwcb49.js → TodoView-BUj6ITAb.js} +2 -2
- package/dist/client/assets/WorkflowNodeEditor-CN7GPmvV.js +8 -0
- package/dist/client/assets/WorkflowNodeEditor-aPj8cv81.css +1 -0
- package/dist/client/assets/app-B2ZxMfJT.js +13 -0
- package/dist/client/assets/app-BffGU_HQ.js +13 -0
- package/dist/client/assets/app-C8AHhs5N.js +13 -0
- package/dist/client/assets/app-DCot4oXA.js +13 -0
- package/dist/client/assets/app-Ri9Te2Dv.js +13 -0
- package/dist/client/assets/app-sEkTyT-w.js +13 -0
- package/dist/client/assets/{dashboard-view-O5j3PSGY.js → dashboard-view-C3SsjXo1.js} +1621 -1621
- package/dist/client/assets/{dashboard-view-DOEa6gWS.js → dashboard-view-CrYwb0oQ.js} +1 -1
- package/dist/client/assets/dashboard-view-Du53JbmQ.css +1 -0
- package/dist/client/assets/{folder-open-BtEAEp7E.js → folder-open-CREXTATY.js} +1 -1
- package/dist/client/assets/index-2kYpdJrx.js +793 -0
- package/dist/client/assets/index-CJUfvGdC.css +1 -0
- package/dist/client/assets/{upload-Y9NiLQ9o.js → upload-BvLUlwaH.js} +1 -1
- package/dist/client/assets/{users-B13HD4Tp.js → users-CjhbU-sF.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +43622 -41519
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +59 -8
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +4 -3
- package/skill/fusion/references/extension-tools.md +3 -3
- package/skill/fusion/references/fusion-capabilities.md +2 -2
- package/dist/client/assets/AgentDetailView-BrETpTDj.js +0 -18
- package/dist/client/assets/AgentDetailView-CY-O6VkV.css +0 -1
- package/dist/client/assets/ChatView-CrVSqQK_.js +0 -6
- package/dist/client/assets/NodesView-DTQP1j4H.js +0 -14
- package/dist/client/assets/SessionTerminal-DwlNZLlr.js +0 -2
- package/dist/client/assets/SettingsModal-Dje7N0hv.js +0 -31
- package/dist/client/assets/WorkflowNodeEditor-Po5uv_dN.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-vnXnKvAr.js +0 -8
- package/dist/client/assets/app-CTRT_hQh.js +0 -13
- package/dist/client/assets/app-CVg6W-HU.js +0 -13
- package/dist/client/assets/app-CY3pQXOr.js +0 -13
- package/dist/client/assets/app-DNh04p5I.js +0 -13
- package/dist/client/assets/app-DhHgtB9j.js +0 -13
- package/dist/client/assets/app-NL_hPGDS.js +0 -13
- package/dist/client/assets/dashboard-view-BgiLoG1G.css +0 -1
- package/dist/client/assets/index-BHGM5W8a.css +0 -1
- package/dist/client/assets/index-CW4OzecJ.js +0 -793
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion/pi-claude-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.0",
|
|
4
4
|
"description": "Fusion vendored fork: pi coding-agent extension that routes LLM calls through the Claude Code CLI. Forked from rchern/pi-claude-cli (MIT). See UPSTREAM.md.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": true,
|
|
@@ -755,6 +755,7 @@ var MAX_ACTIVITY_TURNS = 200;
|
|
|
755
755
|
var MAX_ACTIVITY_TURN_CHARS = 16e3;
|
|
756
756
|
var MAX_PERSISTED_ACTIVITY_TURNS = 50;
|
|
757
757
|
var MAX_PERSISTED_ACTIVITY_TURN_CHARS = 4e3;
|
|
758
|
+
var INTERACTIVE_AI_UNAVAILABLE_MESSAGE = "Session cannot be continued in this process: interactive AI sessions are unavailable (no factory on this context). Resume from a route context with the engine loaded.";
|
|
758
759
|
var CE_EVENTS = {
|
|
759
760
|
turn: "compound-engineering:session-turn",
|
|
760
761
|
question: "compound-engineering:session-question",
|
|
@@ -1000,8 +1001,36 @@ var CeOrchestrator = class {
|
|
|
1000
1001
|
);
|
|
1001
1002
|
}
|
|
1002
1003
|
const live = this.live.get(sessionId);
|
|
1004
|
+
if (!live && !this.factory) {
|
|
1005
|
+
throw new Error(INTERACTIVE_AI_UNAVAILABLE_MESSAGE);
|
|
1006
|
+
}
|
|
1007
|
+
const turn = this.runAnswerTurn(session, questionId, response);
|
|
1008
|
+
if (opts.detach) {
|
|
1009
|
+
if (!live) {
|
|
1010
|
+
this.store.update(sessionId, { status: "active", error: null });
|
|
1011
|
+
}
|
|
1012
|
+
void turn;
|
|
1013
|
+
return { session: this.requireSession(sessionId) };
|
|
1014
|
+
}
|
|
1015
|
+
return turn;
|
|
1016
|
+
}
|
|
1017
|
+
async runAnswerTurn(session, questionId, response) {
|
|
1018
|
+
const sessionId = session.id;
|
|
1019
|
+
let live = this.live.get(sessionId);
|
|
1003
1020
|
if (!live) {
|
|
1004
|
-
|
|
1021
|
+
try {
|
|
1022
|
+
await this.rehydrate(session);
|
|
1023
|
+
live = this.live.get(sessionId);
|
|
1024
|
+
if (!live) {
|
|
1025
|
+
throw new Error(`Session ${sessionId} could not be rehydrated with a live handle.`);
|
|
1026
|
+
}
|
|
1027
|
+
} catch (err) {
|
|
1028
|
+
const interrupted = this.interruptSession(sessionId, err);
|
|
1029
|
+
return {
|
|
1030
|
+
session: interrupted,
|
|
1031
|
+
event: { type: "error", data: { message: interrupted.error ?? "interrupted", cause: err } }
|
|
1032
|
+
};
|
|
1033
|
+
}
|
|
1005
1034
|
}
|
|
1006
1035
|
this.store.appendHistory(sessionId, {
|
|
1007
1036
|
role: "user",
|
|
@@ -1009,12 +1038,7 @@ var CeOrchestrator = class {
|
|
|
1009
1038
|
at: (/* @__PURE__ */ new Date()).toISOString()
|
|
1010
1039
|
});
|
|
1011
1040
|
this.store.update(sessionId, { status: "active", currentQuestion: null });
|
|
1012
|
-
|
|
1013
|
-
if (opts.detach) {
|
|
1014
|
-
void turn;
|
|
1015
|
-
return { session: this.requireSession(sessionId) };
|
|
1016
|
-
}
|
|
1017
|
-
return turn;
|
|
1041
|
+
return this.runTurn(sessionId, () => live.answer(questionId, response), live);
|
|
1018
1042
|
}
|
|
1019
1043
|
/**
|
|
1020
1044
|
* Resume an `awaiting_input`, `interrupted`, or `error` session — and, crucially,
|
|
@@ -1051,7 +1075,7 @@ var CeOrchestrator = class {
|
|
|
1051
1075
|
if (!this.factory) {
|
|
1052
1076
|
const next = this.store.update(sessionId, {
|
|
1053
1077
|
status: "interrupted",
|
|
1054
|
-
error:
|
|
1078
|
+
error: INTERACTIVE_AI_UNAVAILABLE_MESSAGE
|
|
1055
1079
|
}) ?? session;
|
|
1056
1080
|
return { session: next };
|
|
1057
1081
|
}
|
|
@@ -1128,6 +1152,22 @@ var CeOrchestrator = class {
|
|
|
1128
1152
|
getState(sessionId) {
|
|
1129
1153
|
return this.store.get(sessionId);
|
|
1130
1154
|
}
|
|
1155
|
+
/**
|
|
1156
|
+
* Cancel a session: stop any live in-process handle but keep the persisted row
|
|
1157
|
+
* for inspection/resume by marking it `interrupted`. Unlike discard(), cancel
|
|
1158
|
+
* preserves the conversation and progress; discard stops the handle AND deletes
|
|
1159
|
+
* the row. Terminal sessions are idempotent no-ops.
|
|
1160
|
+
*/
|
|
1161
|
+
cancel(sessionId) {
|
|
1162
|
+
const session = this.store.get(sessionId);
|
|
1163
|
+
if (!session) return void 0;
|
|
1164
|
+
if (session.status === "completed" || session.status === "error" || session.status === "interrupted") {
|
|
1165
|
+
return session;
|
|
1166
|
+
}
|
|
1167
|
+
const interrupted = this.interruptSession(sessionId, new Error("Cancelled by user"));
|
|
1168
|
+
this.disposeLive(sessionId);
|
|
1169
|
+
return interrupted;
|
|
1170
|
+
}
|
|
1131
1171
|
/**
|
|
1132
1172
|
* Discard a session: dispose any live in-process handle (so an in-flight
|
|
1133
1173
|
* agent doesn't keep running unobserved) and delete the persisted row.
|
|
@@ -1401,6 +1441,17 @@ function createSessionRoutes() {
|
|
|
1401
1441
|
}
|
|
1402
1442
|
}
|
|
1403
1443
|
},
|
|
1444
|
+
{
|
|
1445
|
+
method: "POST",
|
|
1446
|
+
path: "/sessions/:id/cancel",
|
|
1447
|
+
description: "Cancel an in-flight CE session (stops the agent, keeps the row as interrupted).",
|
|
1448
|
+
handler: async (req, ctx) => {
|
|
1449
|
+
const id = req.params.id;
|
|
1450
|
+
const session = getOrchestrator(ctx).cancel(id);
|
|
1451
|
+
if (!session) return { status: 404, body: { error: `Session ${id} not found` } };
|
|
1452
|
+
return { status: 200, body: { session } };
|
|
1453
|
+
}
|
|
1454
|
+
},
|
|
1404
1455
|
{
|
|
1405
1456
|
method: "GET",
|
|
1406
1457
|
path: "/sessions/:id",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.",
|
|
6
6
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"README.md"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@earendil-works/pi-ai": "^0.
|
|
45
|
-
"@earendil-works/pi-coding-agent": "^0.
|
|
44
|
+
"@earendil-works/pi-ai": "^0.79.1",
|
|
45
|
+
"@earendil-works/pi-coding-agent": "^0.79.1",
|
|
46
46
|
"dockerode": "^4.0.12",
|
|
47
47
|
"express": "^5.1.0",
|
|
48
48
|
"i18next": "^26.3.1",
|
|
@@ -108,6 +108,7 @@
|
|
|
108
108
|
"typecheck": "tsc --noEmit",
|
|
109
109
|
"test": "vitest run --silent=passed-only --reporter=dot",
|
|
110
110
|
"test:ci-shape": "vitest run src/__tests__/ci-workflow.test.ts --silent=passed-only --reporter=dot",
|
|
111
|
+
"test:docs-index": "vitest run src/__tests__/docs-readme-index.test.ts --silent=passed-only --reporter=dot",
|
|
111
112
|
"test:slow-cli": "cross-env FUSION_TEST_SLOW_CLI=1 vitest run src/commands/__tests__/agent-export.test.ts --silent=passed-only --reporter=dot",
|
|
112
113
|
"test:extension-integration": "cross-env FUSION_TEST_EXTENSION_INTEGRATION=1 vitest run src/__tests__/extension-integration.test.ts --silent=passed-only --reporter=dot",
|
|
113
114
|
"test:build-exe": "cross-env FUSION_TEST_BUILD_EXE=1 vitest run --config vitest.build-exe.config.ts --silent=passed-only --reporter=dot",
|
|
@@ -104,15 +104,15 @@ Request a refinement of a completed or in-review task. Creates a new follow-up t
|
|
|
104
104
|
|
|
105
105
|
### fn_task_archive
|
|
106
106
|
|
|
107
|
-
Archive a
|
|
107
|
+
Archive a task from any live column (move to archived). Archived tasks are preserved for historical reference but moved out of the main board view.
|
|
108
108
|
|
|
109
109
|
| Parameter | Type | Required | Description |
|
|
110
110
|
|-----------|------|----------|-------------|
|
|
111
|
-
| `id` | string | ✓ | Task ID to archive (e.g. FN-001).
|
|
111
|
+
| `id` | string | ✓ | Task ID to archive from any live column (e.g. FN-001). |
|
|
112
112
|
|
|
113
113
|
### fn_task_unarchive
|
|
114
114
|
|
|
115
|
-
Unarchive an archived task (move from archived →
|
|
115
|
+
Unarchive an archived task (move from archived → its restore column). Restores to the pre-archive column when available, with active execution columns downgraded to todo.
|
|
116
116
|
|
|
117
117
|
| Parameter | Type | Required | Description |
|
|
118
118
|
|-----------|------|----------|-------------|
|
|
@@ -22,8 +22,8 @@ All skill/extension tool invocations in this catalog use the public `fn_*` names
|
|
|
22
22
|
| `fn_task_retry` | Retry a failed task — clears the error state. Non-review failures move to todo; in-review execution failures move to todo preserving progress; in-review merge failures stay in-place for auto-merge retry. |
|
|
23
23
|
| `fn_task_duplicate` | Duplicate an existing task, creating a fresh copy in planning. Copies the title and description but resets all execution state. The AI planning agent will replan the new task. |
|
|
24
24
|
| `fn_task_refine` | Request a refinement of a completed or in-review task. Creates a new follow-up task in planning that references the original task as a dependency. Use this when a done or in-review task needs additional work, improvements, or follow-up changes. |
|
|
25
|
-
| `fn_task_archive` | Archive a
|
|
26
|
-
| `fn_task_unarchive` | Unarchive an archived task (move from archived →
|
|
25
|
+
| `fn_task_archive` | Archive a task from any live column (move to archived). Archived tasks are preserved for historical reference but moved out of the main board view. |
|
|
26
|
+
| `fn_task_unarchive` | Unarchive an archived task (move from archived → its restore column). Restores to the pre-archive column when available, with active execution columns downgraded to todo. |
|
|
27
27
|
| `fn_task_delete` | Soft-delete a task from active Fusion board views. The task row and artifacts are preserved; optional allowResurrection marks the ID for intentional recreation. |
|
|
28
28
|
| `fn_task_import_github` | Import GitHub issues as Fusion tasks. Fetches open issues from a repository and creates tasks in the planning column. Each task includes the issue title and body with a link to the source issue. |
|
|
29
29
|
| `fn_task_import_github_issue` | Import a specific GitHub issue as a Fusion task. Fetches the issue by number and creates a single task in the planning column with the issue title and body. |
|