@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.
Files changed (83) hide show
  1. package/dist/bin.js +44240 -41922
  2. package/dist/client/.vite/manifest.json +75 -75
  3. package/dist/client/assets/AgentDetailView-C5Lb3fd3.js +18 -0
  4. package/dist/client/assets/AgentDetailView-DiWELtb1.css +1 -0
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-BP6d1LFG.js → AgentPermissionPolicyEditor-DtRcvE6M.js} +2 -2
  6. package/dist/client/assets/{AgentsView-COx3draV.js → AgentsView-BVW-NOYD.js} +3 -3
  7. package/dist/client/assets/ChatView-Dy-oIkrK.js +6 -0
  8. package/dist/client/assets/{DevServerView-DXQ1LX4H.js → DevServerView-DLsFSP4s.js} +1 -1
  9. package/dist/client/assets/{DirectoryPicker-B_8ICSPl.js → DirectoryPicker-_QawX-uL.js} +1 -1
  10. package/dist/client/assets/{DocumentsView-DmNB9rJZ.js → DocumentsView-DierUJsj.js} +1 -1
  11. package/dist/client/assets/{EvalsView-72w3_AO6.js → EvalsView-B83lYKQl.js} +1 -1
  12. package/dist/client/assets/{ExperimentalAgentOnboardingModal-Be4oaohM.js → ExperimentalAgentOnboardingModal-CTctYTPU.js} +1 -1
  13. package/dist/client/assets/{GoalsView-DkEXO_mx.js → GoalsView-CKn8i0i0.js} +1 -1
  14. package/dist/client/assets/{InsightsView-_-wd4BOJ.js → InsightsView-EpRHCD8G.js} +1 -1
  15. package/dist/client/assets/{MemoryView-BOCIc8HT.js → MemoryView-Df_ocTc5.js} +2 -2
  16. package/dist/client/assets/NodesView-DF7xJ_3z.js +14 -0
  17. package/dist/client/assets/{PiExtensionsManager-BqaI9GKX.js → PiExtensionsManager-BOooOEDx.js} +2 -2
  18. package/dist/client/assets/{PluginManager-DYaVwsXd.js → PluginManager-CHrDAzK6.js} +1 -1
  19. package/dist/client/assets/{PullRequestView-Dk9a7jRZ.js → PullRequestView-CJU21OZ6.js} +2 -2
  20. package/dist/client/assets/{ReliabilityView-B-i5SOoD.js → ReliabilityView-uHkW1Qeu.js} +1 -1
  21. package/dist/client/assets/{ResearchView-C2Gx8jC9.js → ResearchView-oZ2-vbjL.js} +1 -1
  22. package/dist/client/assets/{SecretsView-Db2HAGi2.js → SecretsView-BpkqSV_E.js} +1 -1
  23. package/dist/client/assets/SessionTerminal-D9IW4cDj.js +2 -0
  24. package/dist/client/assets/{SettingsModal-B-d30TVy.js → SettingsModal-BmB5l2bA.js} +1 -1
  25. package/dist/client/assets/SettingsModal-C8gsAazm.js +31 -0
  26. package/dist/client/assets/{SetupWizardModal-Cw3RdN83.js → SetupWizardModal-BYLEU_7o.js} +1 -1
  27. package/dist/client/assets/{SkillsView-BGyynaI4.js → SkillsView-8GgQ8Z_Z.js} +1 -1
  28. package/dist/client/assets/{StashRecoveryView-CFaU-hym.js → StashRecoveryView-CT1t1Uf2.js} +1 -1
  29. package/dist/client/assets/{TodoView-Djjwcb49.js → TodoView-BUj6ITAb.js} +2 -2
  30. package/dist/client/assets/WorkflowNodeEditor-CN7GPmvV.js +8 -0
  31. package/dist/client/assets/WorkflowNodeEditor-aPj8cv81.css +1 -0
  32. package/dist/client/assets/app-B2ZxMfJT.js +13 -0
  33. package/dist/client/assets/app-BffGU_HQ.js +13 -0
  34. package/dist/client/assets/app-C8AHhs5N.js +13 -0
  35. package/dist/client/assets/app-DCot4oXA.js +13 -0
  36. package/dist/client/assets/app-Ri9Te2Dv.js +13 -0
  37. package/dist/client/assets/app-sEkTyT-w.js +13 -0
  38. package/dist/client/assets/{dashboard-view-O5j3PSGY.js → dashboard-view-C3SsjXo1.js} +1621 -1621
  39. package/dist/client/assets/{dashboard-view-DOEa6gWS.js → dashboard-view-CrYwb0oQ.js} +1 -1
  40. package/dist/client/assets/dashboard-view-Du53JbmQ.css +1 -0
  41. package/dist/client/assets/{folder-open-BtEAEp7E.js → folder-open-CREXTATY.js} +1 -1
  42. package/dist/client/assets/index-2kYpdJrx.js +793 -0
  43. package/dist/client/assets/index-CJUfvGdC.css +1 -0
  44. package/dist/client/assets/{upload-Y9NiLQ9o.js → upload-BvLUlwaH.js} +1 -1
  45. package/dist/client/assets/{users-B13HD4Tp.js → users-CjhbU-sF.js} +1 -1
  46. package/dist/client/index.html +2 -2
  47. package/dist/client/version.json +1 -1
  48. package/dist/droid-cli/package.json +1 -1
  49. package/dist/extension.js +43622 -41519
  50. package/dist/pi-claude-cli/package.json +1 -1
  51. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  52. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  53. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +59 -8
  54. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  55. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  56. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  57. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  58. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  59. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  60. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  61. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  62. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  63. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  64. package/package.json +4 -3
  65. package/skill/fusion/references/extension-tools.md +3 -3
  66. package/skill/fusion/references/fusion-capabilities.md +2 -2
  67. package/dist/client/assets/AgentDetailView-BrETpTDj.js +0 -18
  68. package/dist/client/assets/AgentDetailView-CY-O6VkV.css +0 -1
  69. package/dist/client/assets/ChatView-CrVSqQK_.js +0 -6
  70. package/dist/client/assets/NodesView-DTQP1j4H.js +0 -14
  71. package/dist/client/assets/SessionTerminal-DwlNZLlr.js +0 -2
  72. package/dist/client/assets/SettingsModal-Dje7N0hv.js +0 -31
  73. package/dist/client/assets/WorkflowNodeEditor-Po5uv_dN.css +0 -1
  74. package/dist/client/assets/WorkflowNodeEditor-vnXnKvAr.js +0 -8
  75. package/dist/client/assets/app-CTRT_hQh.js +0 -13
  76. package/dist/client/assets/app-CVg6W-HU.js +0 -13
  77. package/dist/client/assets/app-CY3pQXOr.js +0 -13
  78. package/dist/client/assets/app-DNh04p5I.js +0 -13
  79. package/dist/client/assets/app-DhHgtB9j.js +0 -13
  80. package/dist/client/assets/app-NL_hPGDS.js +0 -13
  81. package/dist/client/assets/dashboard-view-BgiLoG1G.css +0 -1
  82. package/dist/client/assets/index-BHGM5W8a.css +0 -1
  83. 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.40.1",
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,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/acp-runtime",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cli-printing-press",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "type": "module",
5
5
  "description": "CLI Printing Press plugin package for Fusion",
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
- throw new Error(`Session ${sessionId} has no live handle in this process; call resume() first.`);
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
- const turn = this.runTurn(sessionId, () => live.answer(questionId, response), live);
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: "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."
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/compound-engineering",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/cursor-runtime",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/dependency-graph",
3
- "version": "0.1.33",
3
+ "version": "0.1.35",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/droid-runtime",
3
- "version": "0.1.28",
3
+ "version": "0.1.30",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/hermes-runtime",
3
- "version": "0.2.52",
3
+ "version": "0.2.54",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/openclaw-runtime",
3
- "version": "0.2.52",
3
+ "version": "0.2.54",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/paperclip-runtime",
3
- "version": "0.2.52",
3
+ "version": "0.2.54",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/reports",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "type": "module",
5
5
  "description": "Reports plugin for Fusion",
6
6
  "private": true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/roadmap",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusion-plugin-examples/whatsapp-chat",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "type": "module",
5
5
  "description": "WhatsApp Web (Baileys) chat bridge for Fusion agents",
6
6
  "keywords": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runfusion/fusion",
3
- "version": "0.40.1",
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.78.0",
45
- "@earendil-works/pi-coding-agent": "^0.78.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 done task (move from done → archived). Archived tasks are preserved for historical reference but moved out of the main board view.
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). Must be in 'done' column. |
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 → done). Restores the task to the done column.
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 done task (move from done → 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 → done). Restores the task to the done column. |
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. |