@runfusion/fusion 0.76.0-beta.1 → 0.76.0-beta.2
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 +503 -213
- package/dist/child-process-worker.js +466 -207
- package/dist/client/.vite/manifest.json +260 -260
- package/dist/client/assets/{AgentDetailView-Cbl1sw6i.js → AgentDetailView-gak4EWTI.js} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor-DD1U5M9p.js → AgentPermissionPolicyEditor-DP1QbZL-.js} +1 -1
- package/dist/client/assets/{AgentsView-BMcCbple.js → AgentsView-DAMRTKzI.js} +3 -3
- package/dist/client/assets/ChatView-iE-2gf5P.js +13 -0
- package/dist/client/assets/{CommandCenter-D7mcD61V.js → CommandCenter-B6RnkLYm.js} +1 -1
- package/dist/client/assets/{DevServerView-DaqCn0p5.js → DevServerView-DcFL_LzK.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-CLdqqqYN.js → DirectoryPicker-CtjqrYoO.js} +1 -1
- package/dist/client/assets/{DocumentsView-BOROVxPm.js → DocumentsView-BkAe2S4H.js} +1 -1
- package/dist/client/assets/{EvalsView-BQMXRUlQ.js → EvalsView-CbGA9dMn.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-1GNeCIQT.js → ExperimentalAgentOnboardingModal-CMgO_S8T.js} +1 -1
- package/dist/client/assets/{GoalsView-Cr3c_2GC.js → GoalsView-_3P9J5sf.js} +1 -1
- package/dist/client/assets/{InsightsView-DgVBVQM4.js → InsightsView-DOhO7xH5.js} +1 -1
- package/dist/client/assets/{MemoryView-C0VzzMSw.js → MemoryView-DwJas8vi.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-D1kkkVtP.js → PiExtensionsManager-B_LiW_e9.js} +1 -1
- package/dist/client/assets/{PluginManager-BW-_Zyo5.js → PluginManager-BkB6WLQc.js} +1 -1
- package/dist/client/assets/{PullRequestView-Cmlo4nWA.js → PullRequestView-DcH5tmYc.js} +1 -1
- package/dist/client/assets/{ReportModal-BWuaroTF.js → ReportModal-BOEbqtqG.js} +1 -1
- package/dist/client/assets/{ResearchView-BmkF_vZU.js → ResearchView-Dp6V42pI.js} +1 -1
- package/dist/client/assets/{SecretsView-DVc8Hky0.js → SecretsView-BCqXHB2L.js} +1 -1
- package/dist/client/assets/{SessionTerminal-DCXrxA57.js → SessionTerminal-CkdoQv4y.js} +1 -1
- package/dist/client/assets/{SettingsModal-DZ32F1c-.js → SettingsModal-D4Fn4GlS.js} +3 -3
- package/dist/client/assets/{SettingsModal-DqwpLnDU.js → SettingsModal-Dc7YG6KB.js} +1 -1
- package/dist/client/assets/{SettingsTextareaRow-B5spAoOY.js → SettingsTextareaRow-WSkBoAOO.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-VTBLyFzr.js → SetupWizardModal-VTrJAsKd.js} +2 -2
- package/dist/client/assets/{SkillsView-CR91ey9d.js → SkillsView-CXeXOxfF.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-BzGh_Fd9.js → WorkflowNodeEditor-DoxLGPRF.js} +1 -1
- package/dist/client/assets/{agent-import-generation-D27NKQsr.js → agent-import-generation-upc0yw-M.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-C2K_M3x3.js → agentsOrgChartLayout-C3iumMrW.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BQy8UcRx.js → architectureDiagram-3BPJPVTR-D6jqc3fJ.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-CZG1bqFQ.js → blockDiagram-GPEHLZMM-DY3AKuPD.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-CZmO_kg3.js → c4Diagram-AAUBKEIU-CpD52V4g.js} +1 -1
- package/dist/client/assets/channel-CaxOu15c.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-jsad6DTE.js → chunk-2J33WTMH-CPeIHyAX.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-DX7SuvwP.js → chunk-4BX2VUAB-ivAwI4xM.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-De20xFgU.js → chunk-55IACEB6-BtVQ5XaZ.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-CNiri9yW.js → chunk-727SXJPM-1eap1vDU.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DvDqG-ax.js → chunk-AQP2D5EJ-B2NB3BW9.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-DkMdKaUq.js → chunk-FMBD7UC4-Hk_smNYv.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-Do5BwIrI.js → chunk-ND2GUHAM-BmGCAojk.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-BnJgt9vl.js → chunk-QZHKN3VN-D0aXZ8CV.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-DXIkGbsl.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DXIkGbsl.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-D-ivAzzF.js → cose-bilkent-S5V4N54A-DAbu_gnF.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-Bpd9L0or.js → dagre-BM42HDAG-BdmLlrDJ.js} +1 -1
- package/dist/client/assets/{dashboard-view-DSvVO6Vr.js → dashboard-view-BoFBSXUn.js} +1 -1
- package/dist/client/assets/{dashboard-view-CgBo8Ctn.js → dashboard-view-CULL1yhL.js} +1 -1
- package/dist/client/assets/{dashboard-view-C-XU9CVv.js → dashboard-view-CxXMDfNY.js} +1 -1
- package/dist/client/assets/{dashboard-view-DbaRE8Ma.js → dashboard-view-PRCWCSLm.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-B6TT1NWU.js → diagram-2AECGRRQ-PpqLbVUA.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-DpRS2yRw.js → diagram-5GNKFQAL-9rkGmTwh.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-BVbZr02C.js → diagram-KO2AKTUF-BT-efOMo.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-DzENbfal.js → diagram-LMA3HP47-w79OWFxg.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-BIePG5SY.js → diagram-OG6HWLK6-Bye9I5IO.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-CQo3WBwo.js → erDiagram-TEJ5UH35-aodREgDf.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-Ct2H4jYo.js → flowDiagram-I6XJVG4X-D0DKItY3.js} +1 -1
- package/dist/client/assets/{folder-open-DAh8mpTX.js → folder-open-CqvaMJvx.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-DyOLCG4B.js → ganttDiagram-6RSMTGT7-CZVApkvw.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-sC28-su3.js → gitGraphDiagram-PVQCEYII-D_ynwJ4p.js} +1 -1
- package/dist/client/assets/index-DWRJyaa3.js +2818 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-Q81_5aBZ.js → infoDiagram-5YYISTIA-pJG6zxjk.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Cwkjs0z5.js → ishikawaDiagram-YF4QCWOH-nFZ5laUo.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-BXcBV1Bc.js → journeyDiagram-JHISSGLW-CWpCaAIe.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-BI7hW892.js → kanban-definition-UN3LZRKU-ATkPspKa.js} +1 -1
- package/dist/client/assets/{mermaid.core-B8oDA6jj.js → mermaid.core-CDXPNs7a.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-COG6_9eD.js → mindmap-definition-RKZ34NQL-BkqS9tpe.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-D11brZ_N.js → pieDiagram-4H26LBE5-DEUyVLs-.js} +1 -1
- package/dist/client/assets/{puzzle-D3_Z_rlW.js → puzzle-DQ0y1-XK.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-jmhDVZcv.js → quadrantDiagram-W4KKPZXB-ESBJNK5c.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BKCUWI1E.js → requirementDiagram-4Y6WPE33-CqPs7zcv.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-HsZdEl2t.js → sankeyDiagram-5OEKKPKP-CkFN0m14.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CsDf7Fup.js → sequenceDiagram-3UESZ5HK-Dx2nDuMO.js} +1 -1
- package/dist/client/assets/{shield-alert-C16k8wNu.js → shield-alert-BS05s4RM.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-BqAyftqe.js → standing-instructions-template-xprxYNHm.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-fvzWhltB.js → stateDiagram-AJRCARHV-EUPmRFGd.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-cnt42Sr_.js → stateDiagram-v2-BHNVJYJU-DcQ2mhi5.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-DsZFCSMb.js → timeline-definition-PNZ67QCA-D4YO_3V-.js} +1 -1
- package/dist/client/assets/{upload-_s5sL5Pq.js → upload-BjyBtxo7.js} +1 -1
- package/dist/client/assets/{users-DH1U5ISc.js → users-D5ogZ7WQ.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-B3KDWS-e.js → vennDiagram-CIIHVFJN-BT5_XuQL.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-BKs5MtQS.js → wardley-L42UT6IY-X_ZMW457.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CNsEoXVB.js → wardleyDiagram-YWT4CUSO-GK9nONHU.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-kq_gW4QC.js → xychartDiagram-2RQKCTM6-Dw3zXHAq.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +647 -207
- package/dist/migrations/0057_fn_9004_project_ownership_default_reconciliation.sql +13 -0
- package/dist/migrations/0058_fn_9014_message_archive.sql +13 -0
- package/dist/pi-claude-cli/package.json +5 -5
- package/dist/plugin-sdk/index.js +69 -23
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +71 -25
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +69 -23
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +3 -3
- package/skill/fusion/SKILL.md +1 -1
- package/skill/fusion/references/extension-tools.md +22 -0
- package/skill/fusion/references/fusion-capabilities.md +2 -0
- package/dist/client/assets/ChatView-DcM-ARpZ.js +0 -13
- package/dist/client/assets/channel-Cwl9FefC.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BZtWCoHC.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BZtWCoHC.js +0 -1
- package/dist/client/assets/index-BlGpMJSZ.js +0 -2818
|
@@ -163414,9 +163414,14 @@ var config = projectSchema.table("config", {
|
|
|
163414
163414
|
// now keyed per-project on `project_id` (the effective PK). `id` is retained
|
|
163415
163415
|
// for column-shape parity (always 1) but is no longer the PK and no longer
|
|
163416
163416
|
// CHECK-constrained. Single-project / SQLite-parity callers leave project_id
|
|
163417
|
-
//
|
|
163417
|
+
// through the database ownership trigger, preserving the pre-isolation behavior.
|
|
163418
|
+
/*
|
|
163419
|
+
FNXC:MultiProjectIsolation 2026-08-12-15:43:
|
|
163420
|
+
Migration 0006 owns config's project_id default and leaves its catalog PK as (project_id).
|
|
163421
|
+
Drizzle emits DEFAULT while the database GUC/trigger selects the effective ownership partition.
|
|
163422
|
+
*/
|
|
163418
163423
|
id: integer("id").default(1),
|
|
163419
|
-
projectId: text("project_id").notNull().default(
|
|
163424
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`).primaryKey(),
|
|
163420
163425
|
nextId: integer("next_id").default(1),
|
|
163421
163426
|
nextWorkflowStepId: integer("next_workflow_step_id").default(1),
|
|
163422
163427
|
// FNXC:SqliteFinalRemoval 2026-06-28:
|
|
@@ -163810,9 +163815,13 @@ var taskCommitAssociations = projectSchema.table("task_commit_associations", {
|
|
|
163810
163815
|
var automations = projectSchema.table("automations", {
|
|
163811
163816
|
/*
|
|
163812
163817
|
* FNXC:AutomationIsolation 2026-07-13-22:37:
|
|
163813
|
-
* Automations are partitioned by the AsyncDataLayer's project ID because embedded PostgreSQL consolidates the per-project SQLite files into one table. The composite key deliberately permits the same automation ID in two projects without allowing either project's CRUD or cron-claim path to address the other row.
|
|
163818
|
+
* Automations are partitioned by the AsyncDataLayer's project ID because embedded PostgreSQL consolidates the per-project SQLite files into one table. The composite key deliberately permits the same automation ID in two projects without allowing either project's CRUD or cron-claim path to address the other row.
|
|
163819
|
+
*
|
|
163820
|
+
* FNXC:MultiProjectIsolation 2026-08-12-15:43:
|
|
163821
|
+
* Migration 0006 owns the default through the database GUC/trigger; Drizzle emits DEFAULT
|
|
163822
|
+
* without replacing the physical legacy fallback or the fail-closed bound writer contract.
|
|
163814
163823
|
*/
|
|
163815
|
-
projectId: text("project_id").notNull().default(
|
|
163824
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
163816
163825
|
id: text("id").notNull(),
|
|
163817
163826
|
name: text("name").notNull(),
|
|
163818
163827
|
description: text("description"),
|
|
@@ -164111,7 +164120,8 @@ var taskDocuments = projectSchema.table("task_documents", {
|
|
|
164111
164120
|
index("idxTaskDocumentsTaskId").on(t.taskId)
|
|
164112
164121
|
]);
|
|
164113
164122
|
var artifacts = projectSchema.table("artifacts", {
|
|
164114
|
-
|
|
164123
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
164124
|
+
id: text("id").notNull(),
|
|
164115
164125
|
type: text("type").notNull(),
|
|
164116
164126
|
title: text("title").notNull(),
|
|
164117
164127
|
description: text("description"),
|
|
@@ -164126,7 +164136,8 @@ var artifacts = projectSchema.table("artifacts", {
|
|
|
164126
164136
|
createdAt: text("created_at").notNull(),
|
|
164127
164137
|
updatedAt: text("updated_at").notNull()
|
|
164128
164138
|
}, (t) => [
|
|
164129
|
-
|
|
164139
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
164140
|
+
foreignKey({ name: "artifacts_task_id_fkey", columns: [t.projectId, t.taskId], foreignColumns: [tasks.projectId, tasks.id] }).onDelete("cascade"),
|
|
164130
164141
|
index("idxArtifactsTaskId").on(t.taskId),
|
|
164131
164142
|
index("idxArtifactsAuthorId").on(t.authorId),
|
|
164132
164143
|
index("idxArtifactsType").on(t.type),
|
|
@@ -164316,7 +164327,8 @@ var evalRunEvents = projectSchema.table("eval_run_events", {
|
|
|
164316
164327
|
index("idxEvalRunEventsRunIdSeq").on(t.runId, t.seq)
|
|
164317
164328
|
]);
|
|
164318
164329
|
var secrets = projectSchema.table("secrets", {
|
|
164319
|
-
|
|
164330
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
164331
|
+
id: text("id").notNull(),
|
|
164320
164332
|
key: text("key").notNull(),
|
|
164321
164333
|
valueCiphertext: bytea("value_ciphertext").notNull(),
|
|
164322
164334
|
nonce: bytea("nonce").notNull(),
|
|
@@ -164329,7 +164341,8 @@ var secrets = projectSchema.table("secrets", {
|
|
|
164329
164341
|
lastReadAt: text("last_read_at"),
|
|
164330
164342
|
lastReadBy: text("last_read_by")
|
|
164331
164343
|
}, (t) => [
|
|
164332
|
-
|
|
164344
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
164345
|
+
unique("secrets_key_unique").on(t.projectId, t.key),
|
|
164333
164346
|
check("secrets_access_policy_check", sql`${t.accessPolicy} IN ('auto', 'prompt', 'deny')`),
|
|
164334
164347
|
check("secrets_env_exportable_check", sql`${t.envExportable} IN (0, 1)`)
|
|
164335
164348
|
]);
|
|
@@ -164371,10 +164384,11 @@ var missions = projectSchema.table("missions", {
|
|
|
164371
164384
|
updatedAt: text("updated_at").notNull()
|
|
164372
164385
|
}, (t) => [primaryKey({ columns: [t.projectId, t.id] })]);
|
|
164373
164386
|
var branchGroups = projectSchema.table("branch_groups", {
|
|
164374
|
-
|
|
164387
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
164388
|
+
id: text("id").notNull(),
|
|
164375
164389
|
sourceType: text("source_type").notNull(),
|
|
164376
164390
|
sourceId: text("source_id").notNull(),
|
|
164377
|
-
branchName: text("branch_name").notNull()
|
|
164391
|
+
branchName: text("branch_name").notNull(),
|
|
164378
164392
|
worktreePath: text("worktree_path"),
|
|
164379
164393
|
autoMerge: integer("auto_merge").notNull().default(0),
|
|
164380
164394
|
prState: text("pr_state").notNull().default("none"),
|
|
@@ -164390,6 +164404,8 @@ var branchGroups = projectSchema.table("branch_groups", {
|
|
|
164390
164404
|
updatedAt: bigint("updated_at", { mode: "number" }).notNull(),
|
|
164391
164405
|
closedAt: bigint("closed_at", { mode: "number" })
|
|
164392
164406
|
}, (t) => [
|
|
164407
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
164408
|
+
unique("branch_groups_branch_name_key").on(t.projectId, t.branchName),
|
|
164393
164409
|
check("branch_groups_source_type_check", sql`${t.sourceType} IN ('mission','planning','new-task')`),
|
|
164394
164410
|
check("branch_groups_pr_state_check", sql`${t.prState} IN ('none','open','merged','closed')`),
|
|
164395
164411
|
check("branch_groups_status_check", sql`${t.status} IN ('open','finalized','abandoned')`),
|
|
@@ -164791,12 +164807,14 @@ var usageEvents = projectSchema.table("usage_events", {
|
|
|
164791
164807
|
index("idxUsageEventsKindTs").on(t.kind, t.ts)
|
|
164792
164808
|
]);
|
|
164793
164809
|
var pluginActivations = projectSchema.table("plugin_activations", {
|
|
164794
|
-
|
|
164810
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
164811
|
+
id: integer("id").generatedAlwaysAsIdentity().notNull(),
|
|
164795
164812
|
pluginId: text("plugin_id").notNull(),
|
|
164796
164813
|
source: text("source").notNull(),
|
|
164797
164814
|
pluginVersion: text("plugin_version"),
|
|
164798
164815
|
activatedAt: text("activated_at").notNull()
|
|
164799
164816
|
}, (t) => [
|
|
164817
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
164800
164818
|
index("idxPluginActivationsActivatedAt").on(t.activatedAt),
|
|
164801
164819
|
index("idxPluginActivationsPluginId").on(t.pluginId)
|
|
164802
164820
|
]);
|
|
@@ -164821,8 +164839,13 @@ var knowledgePages = projectSchema.table("knowledge_pages", {
|
|
|
164821
164839
|
index("idxKnowledgePagesUpdatedAt").on(t.updatedAt)
|
|
164822
164840
|
]);
|
|
164823
164841
|
var deployments = projectSchema.table("deployments", {
|
|
164824
|
-
id: integer("id").generatedAlwaysAsIdentity().
|
|
164825
|
-
|
|
164842
|
+
id: integer("id").generatedAlwaysAsIdentity().notNull(),
|
|
164843
|
+
/*
|
|
164844
|
+
FNXC:MultiProjectIsolation 2026-08-12-15:43:
|
|
164845
|
+
Migration 0006 rebuilt deployments_pkey as (project_id, id). Drizzle emits DEFAULT while the
|
|
164846
|
+
database GUC/trigger keeps ownership stamping and the physical legacy fallback authoritative.
|
|
164847
|
+
*/
|
|
164848
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
164826
164849
|
deploymentId: text("deployment_id").notNull(),
|
|
164827
164850
|
service: text("service"),
|
|
164828
164851
|
environment: text("environment"),
|
|
@@ -164833,6 +164856,7 @@ var deployments = projectSchema.table("deployments", {
|
|
|
164833
164856
|
meta: jsonb("meta"),
|
|
164834
164857
|
createdAt: text("created_at").notNull()
|
|
164835
164858
|
}, (t) => [
|
|
164859
|
+
primaryKey({ columns: [t.projectId, t.id], name: "deployments_pkey" }),
|
|
164836
164860
|
uniqueIndex("idxDeploymentsProjectDeploymentId").on(t.projectId, t.deploymentId),
|
|
164837
164861
|
index("idxDeploymentsProjectDeployedAt").on(t.projectId, t.deployedAt),
|
|
164838
164862
|
index("idxDeploymentsDeployedAt").on(t.deployedAt),
|
|
@@ -164840,7 +164864,12 @@ var deployments = projectSchema.table("deployments", {
|
|
|
164840
164864
|
]);
|
|
164841
164865
|
var githubCheckStates = projectSchema.table("github_check_states", {
|
|
164842
164866
|
id: integer("id").generatedAlwaysAsIdentity().notNull(),
|
|
164843
|
-
|
|
164867
|
+
/*
|
|
164868
|
+
FNXC:MultiProjectIsolation 2026-08-12-15:43:
|
|
164869
|
+
Migration 0048 post-dated 0006, so FN-9004 reconciles its physical default to the ownership
|
|
164870
|
+
expression. Drizzle emits DEFAULT while the database GUC/trigger remains the stamping authority.
|
|
164871
|
+
*/
|
|
164872
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
164844
164873
|
repo: text("repo").notNull(),
|
|
164845
164874
|
headSha: text("head_sha").notNull(),
|
|
164846
164875
|
checkName: text("check_name").notNull(),
|
|
@@ -164860,9 +164889,14 @@ var githubCheckStates = projectSchema.table("github_check_states", {
|
|
|
164860
164889
|
index("idxGithubCheckStatesProjectReceived").on(t.projectId, t.receivedAt)
|
|
164861
164890
|
]);
|
|
164862
164891
|
var incidents = projectSchema.table("incidents", {
|
|
164863
|
-
id: integer("id").generatedAlwaysAsIdentity().
|
|
164864
|
-
|
|
164865
|
-
|
|
164892
|
+
id: integer("id").generatedAlwaysAsIdentity().notNull(),
|
|
164893
|
+
/*
|
|
164894
|
+
FNXC:MultiProjectIsolation 2026-08-12-15:43:
|
|
164895
|
+
Migration 0006 rebuilt incident keys with project_id first. Drizzle emits DEFAULT while the
|
|
164896
|
+
database GUC/trigger retains ownership stamping and its physical legacy fallback.
|
|
164897
|
+
*/
|
|
164898
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
164899
|
+
incidentId: text("incident_id").notNull(),
|
|
164866
164900
|
groupingKey: text("grouping_key").notNull(),
|
|
164867
164901
|
title: text("title").notNull(),
|
|
164868
164902
|
severity: text("severity"),
|
|
@@ -164876,6 +164910,8 @@ var incidents = projectSchema.table("incidents", {
|
|
|
164876
164910
|
createdAt: text("created_at").notNull(),
|
|
164877
164911
|
updatedAt: text("updated_at").notNull()
|
|
164878
164912
|
}, (t) => [
|
|
164913
|
+
primaryKey({ columns: [t.projectId, t.id], name: "incidents_pkey" }),
|
|
164914
|
+
unique("incidents_incident_id_key").on(t.projectId, t.incidentId),
|
|
164879
164915
|
index("idxIncidentsProjectOpenedAt").on(t.projectId, t.openedAt),
|
|
164880
164916
|
index("idxIncidentsProjectStatus").on(t.projectId, t.status),
|
|
164881
164917
|
index("idxIncidentsGroupingKey").on(t.groupingKey),
|
|
@@ -164930,12 +164966,14 @@ var messages = projectSchema.table("messages", {
|
|
|
164930
164966
|
content: text("content").notNull(),
|
|
164931
164967
|
type: text("type").notNull(),
|
|
164932
164968
|
read: integer("read").default(0),
|
|
164969
|
+
archived: integer("archived").default(0),
|
|
164933
164970
|
metadata: jsonb("metadata"),
|
|
164934
164971
|
createdAt: text("created_at").notNull(),
|
|
164935
164972
|
updatedAt: text("updated_at").notNull()
|
|
164936
164973
|
}, (t) => [
|
|
164937
164974
|
primaryKey({ columns: [t.projectId, t.id] }),
|
|
164938
164975
|
index("idxMessagesTo").on(t.toId, t.toType, t.read),
|
|
164976
|
+
index("idxMessagesToArchived").on(t.toId, t.toType, t.archived),
|
|
164939
164977
|
index("idxMessagesFrom").on(t.fromId, t.fromType),
|
|
164940
164978
|
index("idxMessagesCreatedAt").on(t.createdAt)
|
|
164941
164979
|
]);
|
|
@@ -165036,7 +165074,8 @@ var cliSessions = projectSchema.table("cli_sessions", {
|
|
|
165036
165074
|
index("idx_cli_sessions_project_state").on(t.projectId, t.agentState)
|
|
165037
165075
|
]);
|
|
165038
165076
|
var chatMessages = projectSchema.table("chat_messages", {
|
|
165039
|
-
|
|
165077
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
165078
|
+
id: text("id").notNull(),
|
|
165040
165079
|
sessionId: text("session_id").notNull(),
|
|
165041
165080
|
role: text("role").notNull(),
|
|
165042
165081
|
content: text("content").notNull(),
|
|
@@ -165045,6 +165084,7 @@ var chatMessages = projectSchema.table("chat_messages", {
|
|
|
165045
165084
|
createdAt: text("created_at").notNull(),
|
|
165046
165085
|
attachments: jsonb("attachments")
|
|
165047
165086
|
}, (t) => [
|
|
165087
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
165048
165088
|
index("idxChatMessagesSessionId").on(t.sessionId),
|
|
165049
165089
|
index("idxChatMessagesCreatedAt").on(t.createdAt)
|
|
165050
165090
|
]);
|
|
@@ -165070,7 +165110,8 @@ var chatTokenUsage = projectSchema.table("chat_token_usage", {
|
|
|
165070
165110
|
index("idxChatTokenUsageCreatedAt").on(t.createdAt)
|
|
165071
165111
|
]);
|
|
165072
165112
|
var runAuditEvents = projectSchema.table("run_audit_events", {
|
|
165073
|
-
|
|
165113
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
165114
|
+
id: text("id").notNull(),
|
|
165074
165115
|
timestamp: text("timestamp").notNull(),
|
|
165075
165116
|
taskId: text("task_id"),
|
|
165076
165117
|
agentId: text("agent_id").notNull(),
|
|
@@ -165080,6 +165121,7 @@ var runAuditEvents = projectSchema.table("run_audit_events", {
|
|
|
165080
165121
|
target: text("target").notNull(),
|
|
165081
165122
|
metadata: jsonb("metadata")
|
|
165082
165123
|
}, (t) => [
|
|
165124
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
165083
165125
|
index("idxRunAuditEventsRunIdTimestamp").on(t.runId, t.timestamp),
|
|
165084
165126
|
index("idxRunAuditEventsTaskIdTimestamp").on(t.taskId, t.timestamp),
|
|
165085
165127
|
index("idxRunAuditEventsTimestamp").on(t.timestamp)
|
|
@@ -165180,13 +165222,14 @@ var missionLineageStops = projectSchema.table("mission_lineage_stops", {
|
|
|
165180
165222
|
index("idxMissionLineageStopsMissionId").on(t.projectId, t.missionId)
|
|
165181
165223
|
]);
|
|
165182
165224
|
var verificationCache = projectSchema.table("verification_cache", {
|
|
165225
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
165183
165226
|
treeSha: text("tree_sha").notNull(),
|
|
165184
165227
|
testCommand: text("test_command").notNull().default(""),
|
|
165185
165228
|
buildCommand: text("build_command").notNull().default(""),
|
|
165186
165229
|
recordedAt: text("recorded_at").notNull(),
|
|
165187
165230
|
taskId: text("task_id")
|
|
165188
165231
|
}, (t) => [
|
|
165189
|
-
primaryKey({ columns: [t.treeSha, t.testCommand, t.buildCommand] }),
|
|
165232
|
+
primaryKey({ columns: [t.projectId, t.treeSha, t.testCommand, t.buildCommand] }),
|
|
165190
165233
|
index("idxVerificationCacheRecordedAt").on(t.recordedAt)
|
|
165191
165234
|
]);
|
|
165192
165235
|
var importTranslationCache = projectSchema.table("import_translation_cache", {
|
|
@@ -165219,7 +165262,8 @@ var importTranslationCache = projectSchema.table("import_translation_cache", {
|
|
|
165219
165262
|
index("idxImportTranslationCacheRecordedAt").on(t.recordedAt)
|
|
165220
165263
|
]);
|
|
165221
165264
|
var approvalRequests = projectSchema.table("approval_requests", {
|
|
165222
|
-
|
|
165265
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
165266
|
+
id: text("id").notNull(),
|
|
165223
165267
|
status: text("status").notNull(),
|
|
165224
165268
|
requesterActorId: text("requester_actor_id").notNull(),
|
|
165225
165269
|
requesterActorType: text("requester_actor_type").notNull(),
|
|
@@ -165238,13 +165282,14 @@ var approvalRequests = projectSchema.table("approval_requests", {
|
|
|
165238
165282
|
createdAt: text("created_at").notNull(),
|
|
165239
165283
|
updatedAt: text("updated_at").notNull()
|
|
165240
165284
|
}, (t) => [
|
|
165285
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
165241
165286
|
index("idxApprovalRequestsStatusCreatedAt").on(t.status, t.createdAt),
|
|
165242
165287
|
index("idxApprovalRequestsRequesterCreatedAt").on(t.requesterActorId, t.createdAt),
|
|
165243
165288
|
index("idxApprovalRequestsTaskCreatedAt").on(t.taskId, t.createdAt)
|
|
165244
165289
|
]);
|
|
165245
165290
|
var approvalRequestAuditEvents = projectSchema.table("approval_request_audit_events", {
|
|
165246
|
-
projectId: text("project_id").notNull().default(
|
|
165247
|
-
id: text("id").
|
|
165291
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
165292
|
+
id: text("id").notNull(),
|
|
165248
165293
|
requestId: text("request_id").notNull(),
|
|
165249
165294
|
eventType: text("event_type").notNull(),
|
|
165250
165295
|
actorId: text("actor_id").notNull(),
|
|
@@ -165253,6 +165298,7 @@ var approvalRequestAuditEvents = projectSchema.table("approval_request_audit_eve
|
|
|
165253
165298
|
note: text("note"),
|
|
165254
165299
|
createdAt: text("created_at").notNull()
|
|
165255
165300
|
}, (t) => [
|
|
165301
|
+
primaryKey({ columns: [t.projectId, t.id] }),
|
|
165256
165302
|
index("idxApprovalRequestAuditRequestCreatedAt").on(t.requestId, t.createdAt, t.id),
|
|
165257
165303
|
index("idxApprovalRequestAuditProjectCreatedAt").on(t.projectId, t.createdAt)
|
|
165258
165304
|
]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.76.0-beta.
|
|
3
|
+
"version": "0.76.0-beta.2",
|
|
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",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@agentclientprotocol/sdk": "0.24.0",
|
|
51
51
|
"agent-browser": "0.26.0",
|
|
52
|
-
"@earendil-works/pi-ai": "0.
|
|
53
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
52
|
+
"@earendil-works/pi-ai": "0.84.1",
|
|
53
|
+
"@earendil-works/pi-coding-agent": "0.84.1",
|
|
54
54
|
"claude-code-cli-acp": "0.1.1",
|
|
55
55
|
"dockerode": "^4.0.12",
|
|
56
56
|
"electron": "^33.4.11",
|
package/skill/fusion/SKILL.md
CHANGED
|
@@ -32,7 +32,7 @@ Mission → Milestone → Slice → Feature → Task
|
|
|
32
32
|
- **GitHub tools** — `fn_task_import_github`, `fn_task_import_github_issue`, `fn_task_browse_github_issues`
|
|
33
33
|
- **Mission tools** — `fn_mission_create`, `fn_mission_list`, `fn_mission_show`, `fn_mission_list_goals`, `fn_mission_link_goal`, `fn_mission_unlink_goal`, `fn_mission_backfill_assertions`, `fn_mission_delete`, `fn_mission_set_status`, `fn_mission_clear_blocked`, `fn_mission_update`, `fn_milestone_add`, `fn_slice_add`, `fn_feature_add`, `fn_feature_delete`, `fn_slice_delete`, `fn_milestone_delete`, `fn_slice_activate`, `fn_feature_link_task`, `fn_feature_set_status`, `fn_mission_reconcile`, `fn_feature_repair_validation`, `fn_feature_update`, `fn_milestone_update`
|
|
34
34
|
- **Goal tools** — `fn_goal_list`, `fn_goal_create`, `fn_goal_archive`, `fn_goal_show`
|
|
35
|
-
- **Agent tools** — `fn_agent_stop`, `fn_agent_start`, `fn_agent_create`, `fn_agent_update`, `fn_agent_set_instructions`, `fn_agent_delete`, `fn_list_agents`, `fn_delegate_task`, `fn_agent_show`, `fn_agent_org_chart`
|
|
35
|
+
- **Agent tools** — `fn_agent_stop`, `fn_agent_start`, `fn_agent_create`, `fn_agent_update`, `fn_agent_set_instructions`, `fn_agent_read_evaluations`, `fn_agent_evaluation_followup`, `fn_agent_delete`, `fn_list_agents`, `fn_delegate_task`, `fn_agent_show`, `fn_agent_org_chart`
|
|
36
36
|
- **Skills tools** — `fn_skills_search`, `fn_skills_install`
|
|
37
37
|
- **Insight tools** — `fn_insight_list`, `fn_insight_show`, `fn_insight_run_list`, `fn_insight_run_show`
|
|
38
38
|
- **Other tools** — `fn_web_fetch`, `fn_secret_get`, `fn_experiment_finalize`
|
|
@@ -680,6 +680,28 @@ Set the instructionsText and/or instructionsPath of one of the caller's direct o
|
|
|
680
680
|
| `instructions_text` | string | — | Inline instructions. Pass an empty string to clear. |
|
|
681
681
|
| `instructions_path` | string | — | Path to a markdown instructions file. Pass an empty string to clear. |
|
|
682
682
|
|
|
683
|
+
### fn_agent_read_evaluations
|
|
684
|
+
|
|
685
|
+
Read ratings, feedback, reflections, and performance data for a direct or indirect report.
|
|
686
|
+
|
|
687
|
+
| Parameter | Type | Required | Description |
|
|
688
|
+
|-----------|------|----------|-------------|
|
|
689
|
+
| `agent_id` | string | ✓ | Target agent ID or resolvable name |
|
|
690
|
+
| `rating_limit` | number | — | Maximum ratings to return (default 10) |
|
|
691
|
+
| `reflection_limit` | number | — | Maximum reflections to return (default 5) |
|
|
692
|
+
|
|
693
|
+
### fn_agent_evaluation_followup
|
|
694
|
+
|
|
695
|
+
Record a coaching evaluation follow-up for a direct or indirect report to read through its self-improvement loop.
|
|
696
|
+
|
|
697
|
+
| Parameter | Type | Required | Description |
|
|
698
|
+
|-----------|------|----------|-------------|
|
|
699
|
+
| `agent_id` | string | ✓ | Target agent ID or resolvable name |
|
|
700
|
+
| `score` | number | ✓ | Evaluation score from 1 to 5 |
|
|
701
|
+
| `comment` | string | ✓ | Coaching or follow-up note |
|
|
702
|
+
| `category` | string | — | Optional evaluation category |
|
|
703
|
+
| `task_id` | string | — | Optional related task ID |
|
|
704
|
+
|
|
683
705
|
### fn_agent_delete
|
|
684
706
|
|
|
685
707
|
Delete a non-ephemeral agent.
|
|
@@ -87,6 +87,8 @@ All skill/extension tool invocations in this catalog use the public `fn_*` names
|
|
|
87
87
|
| `fn_agent_create` | Create a new non-ephemeral agent. |
|
|
88
88
|
| `fn_agent_update` | Update editable configuration for an existing non-ephemeral agent. Agent callers can only update direct or indirect reports inside their management subtree; user/operator calls are privileged. |
|
|
89
89
|
| `fn_agent_set_instructions` | Set the instructionsText and/or instructionsPath of one of the caller's direct or indirect reports. At least one of instructions_text or instructions_path is required; pass an empty string to clear a field. The change is persisted and recorded as a config revision. |
|
|
90
|
+
| `fn_agent_read_evaluations` | Read ratings, feedback, reflections, and performance data for a direct or indirect report. |
|
|
91
|
+
| `fn_agent_evaluation_followup` | Record a coaching evaluation follow-up for a direct or indirect report to read through its self-improvement loop. |
|
|
90
92
|
| `fn_agent_delete` | Delete a non-ephemeral agent. |
|
|
91
93
|
| `fn_list_agents` | List all available agents in the system. Shows each agent's name, role, state, personality (soul), and current assignment. Use this to discover which agents exist and what they specialize in before delegating work. |
|
|
92
94
|
| `fn_delegate_task` | Create a new task and assign it to a specific agent for execution. The task lands in the selected workflow's ready lane (`todo` on the built-in board, whatever that workflow calls it otherwise) and will be picked up by the target agent on their next heartbeat cycle. Use fn_list_agents first to find available agents and their capabilities. Optionally pass workflow_id to select a workflow at creation time; use fn_workflow_list to discover valid IDs. |
|