@runfusion/fusion 0.76.0-beta.3 → 0.77.0-beta.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 +13802 -9587
- package/dist/child-process-worker.js +6472 -4028
- package/dist/client/.vite/manifest.json +280 -269
- package/dist/client/assets/AgentDetailView-0G9qFd4j.js +13 -0
- package/dist/client/assets/{AgentDetailView-Cc3ATg8a.css → AgentDetailView-jzgy1BAS.css} +1 -1
- package/dist/client/assets/{AgentPermissionPolicyEditor--u9jyUf2.js → AgentPermissionPolicyEditor-BM68g7wo.js} +1 -1
- package/dist/client/assets/AgentsView-DkOUZWw4.js +24 -0
- package/dist/client/assets/ChatView-BPSm2JIH.js +13 -0
- package/dist/client/assets/{CommandCenter-CSRYoveB.js → CommandCenter-DxRSFWNc.js} +26 -26
- package/dist/client/assets/CommandCenter-ilm-DbtI.css +1 -0
- package/dist/client/assets/{DevServerView-B9So_oYx.js → DevServerView-DO-bqJFE.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-BhyDL_2m.js → DirectoryPicker-Cp2gddTE.js} +1 -1
- package/dist/client/assets/DocumentsView-D0E-3G96.js +1 -0
- package/dist/client/assets/EvalsView-BoFVq5hw.js +1 -0
- package/dist/client/assets/ExperimentalAgentOnboardingModal-CS1Sdogm.js +1 -0
- package/dist/client/assets/{GoalsView-B6X5_0Ve.js → GoalsView-sybf7JY4.js} +1 -1
- package/dist/client/assets/InsightsView-nHa7aShn.js +11 -0
- package/dist/client/assets/{MemoryView-DN_3IFmA.css → MemoryView-CdpQqPJJ.css} +1 -1
- package/dist/client/assets/MemoryView-D0IG44za.js +3 -0
- package/dist/client/assets/{PiExtensionsManager-B8At6fO8.js → PiExtensionsManager-CU76weJe.js} +2 -2
- package/dist/client/assets/PluginManager-DyT8XbcG.js +1 -0
- package/dist/client/assets/{PullRequestView-B1hZFrWo.js → PullRequestView-CnxWUSen.js} +2 -2
- package/dist/client/assets/{ReportModal-C46V_zEa.js → ReportModal-CMrmMQjD.js} +5 -5
- package/dist/client/assets/{ResearchView-D8G85BYN.js → ResearchView-BTytQSgy.js} +2 -2
- package/dist/client/assets/{SecretsView-CTri9LRK.js → SecretsView-BuSH5J87.js} +1 -1
- package/dist/client/assets/SessionTerminal-D04kYRrT.js +2 -0
- package/dist/client/assets/SettingsModal-C0FY8MPW.css +1 -0
- package/dist/client/assets/{SettingsModal-rUQcSTJp.js → SettingsModal-Dm-ngbRr.js} +1 -1
- package/dist/client/assets/{SettingsModal-DmfMotcd.css → SettingsModal-Ds0Yj47X.css} +1 -1
- package/dist/client/assets/SettingsModal-xSLhH7Tr.js +21 -0
- package/dist/client/assets/{SettingsTextareaRow-BirlBcem.js → SettingsTextareaRow-CHPgocEp.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-xnCBM9EL.js → SetupWizardModal-y88aXNIQ.js} +2 -2
- package/dist/client/assets/{SkillsView-O5U0ep50.js → SkillsView-CYyQW1Hv.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-BX4d2qqF.js → WorkflowNodeEditor-hYeoz1X8.js} +3 -3
- package/dist/client/assets/{agent-import-generation-DnqVkPkz.js → agent-import-generation-CjiYXzCr.js} +1 -1
- package/dist/client/assets/agentsOrgChartLayout-C0UP_X3z.js +1 -0
- package/dist/client/assets/app-BgpuMvTU.js +13 -0
- package/dist/client/assets/app-BlexHhbW.js +13 -0
- package/dist/client/assets/app-BsuUOR0P.js +13 -0
- package/dist/client/assets/app-DQVOujmO.js +13 -0
- package/dist/client/assets/app-DjyTRx1N.js +5 -0
- package/dist/client/assets/app-Dniggype.js +13 -0
- package/dist/client/assets/app-EV-lyZ0T.js +5 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-gi467xY0.js → architectureDiagram-3BPJPVTR-Dd6GPcqM.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-B_gpcYiR.js → blockDiagram-GPEHLZMM-CC6pLxlz.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-DeylEYsQ.js → c4Diagram-AAUBKEIU-DxMP_l6y.js} +1 -1
- package/dist/client/assets/channel-DlCEMoEf.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-BL2WY0HN.js → chunk-2J33WTMH-BKYToL43.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-BkLExGMe.js → chunk-4BX2VUAB-Bg6rjQb3.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-CSTvCF5T.js → chunk-55IACEB6-CPUwbbGa.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-9J8pKk4x.js → chunk-727SXJPM-DScQBCvv.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DXC1vPWr.js → chunk-AQP2D5EJ-DbX7uaXK.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-CFRUb-zD.js → chunk-FMBD7UC4-DvYKea1c.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-B87HFYS8.js → chunk-ND2GUHAM-CH-Tvw7w.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-CTjHiGbd.js → chunk-QZHKN3VN-CbyEvOoM.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-Bc92O8Ks.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Bc92O8Ks.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-D3Edq3L9.js → cose-bilkent-S5V4N54A-BPB5fV3A.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-CwwbeQfN.js → dagre-BM42HDAG-CilYJ3rR.js} +1 -1
- package/dist/client/assets/{dashboard-view-QxQwJFLz.js → dashboard-view-BnGe8cWo.js} +1 -1
- package/dist/client/assets/{dashboard-view-BLAoW3D4.js → dashboard-view-DnVf3tmI.js} +1 -1
- package/dist/client/assets/{dashboard-view-DAlJxqiJ.js → dashboard-view-DoLU6FxZ.js} +1 -1
- package/dist/client/assets/{dashboard-view-aPzfv99T.js → dashboard-view-dChSM_So.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-koJWWXE4.js → diagram-2AECGRRQ-m9u1Qhyx.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-Yob5cOKT.js → diagram-5GNKFQAL-DVr7Kf0N.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DelvFSkK.js → diagram-KO2AKTUF-D7sgJDFx.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-CMput2h2.js → diagram-LMA3HP47-DNKNDS6r.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-04VXDl79.js → diagram-OG6HWLK6-1Bff4FWn.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-C9iP8Uyp.js → erDiagram-TEJ5UH35-DGua1UHN.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-DENQvu_t.js → flowDiagram-I6XJVG4X-UDfDtwsE.js} +1 -1
- package/dist/client/assets/{folder-open-D-554oji.js → folder-open-CteOypVk.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-BqOttZAT.js → ganttDiagram-6RSMTGT7-COdmD328.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CDcydi-5.js → gitGraphDiagram-PVQCEYII-SUSls7Kw.js} +1 -1
- package/dist/client/assets/index-0ovTXt3t.css +1 -0
- package/dist/client/assets/index-DpCHwyiD.js +2818 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-B5LQQnxt.js → infoDiagram-5YYISTIA-e_DloXj7.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DpFEt7D2.js → ishikawaDiagram-YF4QCWOH-DVWqihXg.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-MELtgu22.js → journeyDiagram-JHISSGLW-BcPY-XP0.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-h33PLATd.js → kanban-definition-UN3LZRKU-BCFG2Jle.js} +1 -1
- package/dist/client/assets/{mermaid.core-Dk2mUPOq.js → mermaid.core-5yPje9Bi.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-B_T4O2-B.js → mindmap-definition-RKZ34NQL-DDApeT3K.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-B1YIFkRl.js → pieDiagram-4H26LBE5-N61_jyeP.js} +1 -1
- package/dist/client/assets/{puzzle-hvecxlpJ.js → puzzle-BkaCP30D.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-BoGQR_hO.js → quadrantDiagram-W4KKPZXB-C5qHiApF.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BSDmUBIx.js → requirementDiagram-4Y6WPE33-C71okgzt.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-Dz_GqOa5.js → sankeyDiagram-5OEKKPKP-B2iKyLjB.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B6twjYUH.js → sequenceDiagram-3UESZ5HK-DfdoYKKk.js} +1 -1
- package/dist/client/assets/{shield-alert-BX4WRJOv.js → shield-alert-BNSeDB8l.js} +1 -1
- package/dist/client/assets/standing-instructions-template-pZtzo1lK.js +20 -0
- package/dist/client/assets/standing-instructions-template-w7Ouw_37.css +1 -0
- package/dist/client/assets/{stateDiagram-AJRCARHV-DuwqWLx-.js → stateDiagram-AJRCARHV-lS-sUi12.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-Bu8Sk187.js → stateDiagram-v2-BHNVJYJU-DXJNDrV9.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-BS6VnqSI.js → timeline-definition-PNZ67QCA-CCwvX81K.js} +1 -1
- package/dist/client/assets/{upload-CaDoyaMW.js → upload-CDovVbu2.js} +1 -1
- package/dist/client/assets/useDiscoveredSkillsCache-BYqP-afh.js +1 -0
- package/dist/client/assets/{users-C5uCLwVM.js → users-CTqECGLo.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CUbzqT5Y.js → vennDiagram-CIIHVFJN-DaiR5nv9.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-Mv-NotFS.js → wardley-L42UT6IY-hA5IHyPW.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DuYpvLZX.js → wardleyDiagram-YWT4CUSO-CILUNESc.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-24_7QXdw.js → xychartDiagram-2RQKCTM6-72eNMmjz.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 +10671 -6904
- package/dist/migrations/0059_fn_9037_tasks_source_agent_index.sql +3 -0
- package/dist/migrations/0060_fn_9059_workspace_coordination_leases.sql +10 -0
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +190 -9
- package/dist/plugin-sdk/index.js +74 -28
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +1096 -73
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +302 -71
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +83 -29
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +176 -46
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +74 -28
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/references/extension-tools.md +2 -0
- package/dist/client/assets/AgentDetailView-T767kKTg.js +0 -13
- package/dist/client/assets/AgentsView-6Ifu7qDr.js +0 -24
- package/dist/client/assets/ChatView-BV3lixQi.js +0 -13
- package/dist/client/assets/CommandCenter-CE4rYjHn.css +0 -1
- package/dist/client/assets/DocumentsView-pbERA7O-.js +0 -1
- package/dist/client/assets/EvalsView-DJQ4ltCg.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-BwJuzkzB.js +0 -1
- package/dist/client/assets/InsightsView-CJgI0J7S.js +0 -11
- package/dist/client/assets/MemoryView-BHq1AHPu.js +0 -3
- package/dist/client/assets/PluginManager-k7hV7_9e.js +0 -1
- package/dist/client/assets/SessionTerminal-BRf6r4Vp.js +0 -2
- package/dist/client/assets/SettingsModal-B30rPfYC.css +0 -1
- package/dist/client/assets/SettingsModal-D0RBeZik.js +0 -21
- package/dist/client/assets/agentsOrgChartLayout-CKuzbhFf.js +0 -1
- package/dist/client/assets/app-B2FwULu2.js +0 -5
- package/dist/client/assets/app-B6nJaqAl.js +0 -13
- package/dist/client/assets/app-CGXZeIRc.js +0 -13
- package/dist/client/assets/app-CGtkeBF5.js +0 -13
- package/dist/client/assets/app-CNzN1Plu.js +0 -13
- package/dist/client/assets/app-DLs-f5yM.js +0 -13
- package/dist/client/assets/app-DsvtcRUG.js +0 -5
- package/dist/client/assets/channel-BoE8DeM4.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-qnbLX_9_.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-qnbLX_9_.js +0 -1
- package/dist/client/assets/index-CXTd3LAB.css +0 -1
- package/dist/client/assets/index-CtYRoouR.js +0 -2818
- package/dist/client/assets/standing-instructions-template-BJY317CC.js +0 -20
- package/dist/client/assets/standing-instructions-template-Ddi_4TIk.css +0 -1
|
@@ -5776,7 +5776,9 @@ __export(project_exports, {
|
|
|
5776
5776
|
workflowSettings: () => workflowSettings,
|
|
5777
5777
|
workflowSteps: () => workflowSteps,
|
|
5778
5778
|
workflowWorkItems: () => workflowWorkItems,
|
|
5779
|
-
workflows: () => workflows
|
|
5779
|
+
workflows: () => workflows,
|
|
5780
|
+
workspaceCoordinationLeases: () => workspaceCoordinationLeases,
|
|
5781
|
+
workspaceLandIntents: () => workspaceLandIntents
|
|
5780
5782
|
});
|
|
5781
5783
|
var projectSchema = pgSchema(PROJECT_SCHEMA);
|
|
5782
5784
|
var tasks = projectSchema.table("tasks", {
|
|
@@ -6043,6 +6045,9 @@ var tasks = projectSchema.table("tasks", {
|
|
|
6043
6045
|
the gate is a full tasks-table scan. Sparse: most rows have NULL parent.
|
|
6044
6046
|
*/
|
|
6045
6047
|
index("idxTasksSourceParentTaskId").on(t.sourceParentTaskId),
|
|
6048
|
+
/* FNXC:TaskRecommendations 2026-08-13-22:23: duplicate intake filters source
|
|
6049
|
+
* lineage on recommendation/agent creates; this sparse index avoids a task-table scan. */
|
|
6050
|
+
index("idxTasksProjectSourceAgentId").on(t.projectId, t.sourceAgentId).where(sql`${t.sourceAgentId} IS NOT NULL`),
|
|
6046
6051
|
// FNXC:EphemeralAgentTaskCreation 2026-07-30-12:00: proposal retries share one stable key, so the database—not a read-before-create race—enforces at-most-once materialization.
|
|
6047
6052
|
uniqueIndex("uqTasksProjectProposalClaimId").on(t.projectId, t.proposalClaimId).where(sql`${t.proposalClaimId} IS NOT NULL`),
|
|
6048
6053
|
/*
|
|
@@ -6277,6 +6282,52 @@ var distributedTaskIdReservations = projectSchema.table("distributed_task_id_res
|
|
|
6277
6282
|
index("idxDistributedTaskIdReservationsPrefixStatus").on(t.prefix, t.status),
|
|
6278
6283
|
index("idxDistributedTaskIdReservationsExpiry").on(t.status, t.expiresAt)
|
|
6279
6284
|
]);
|
|
6285
|
+
var workspaceCoordinationLeases = projectSchema.table("workspace_coordination_leases", {
|
|
6286
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6287
|
+
leaseKey: text("lease_key").notNull(),
|
|
6288
|
+
kind: text("kind").notNull(),
|
|
6289
|
+
ownerTaskId: text("owner_task_id").notNull(),
|
|
6290
|
+
ownerNodeId: text("owner_node_id").notNull(),
|
|
6291
|
+
ownerIncarnationId: text("owner_incarnation_id").notNull(),
|
|
6292
|
+
ownerRunId: text("owner_run_id"),
|
|
6293
|
+
fenceToken: bigint("fence_token", { mode: "bigint" }).notNull().default(sql`0`),
|
|
6294
|
+
fenceRefName: text("fence_ref_name"),
|
|
6295
|
+
fenceRefSha: text("fence_ref_sha"),
|
|
6296
|
+
status: text("status").notNull(),
|
|
6297
|
+
acquiredAt: text("acquired_at").notNull(),
|
|
6298
|
+
renewedAt: text("renewed_at").notNull(),
|
|
6299
|
+
expiresAt: text("expires_at").notNull(),
|
|
6300
|
+
createdAt: text("created_at").notNull(),
|
|
6301
|
+
updatedAt: text("updated_at").notNull()
|
|
6302
|
+
}, (t) => [
|
|
6303
|
+
primaryKey({ columns: [t.projectId, t.leaseKey] }),
|
|
6304
|
+
check("workspace_coordination_leases_kind_check", sql`${t.kind} IN ('acquire', 'land', 'merge-dispatch')`),
|
|
6305
|
+
check("workspace_coordination_leases_status_check", sql`${t.status} IN ('held', 'released', 'expired')`),
|
|
6306
|
+
index("idxWorkspaceCoordinationLeasesOwnerTask").on(t.projectId, t.ownerTaskId),
|
|
6307
|
+
index("idxWorkspaceCoordinationLeasesOwnerNode").on(t.projectId, t.ownerNodeId),
|
|
6308
|
+
index("idxWorkspaceCoordinationLeasesExpiry").on(t.status, t.expiresAt)
|
|
6309
|
+
]);
|
|
6310
|
+
var workspaceLandIntents = projectSchema.table("workspace_land_intents", {
|
|
6311
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6312
|
+
taskId: text("task_id").notNull(),
|
|
6313
|
+
repoRelPath: text("repo_rel_path").notNull(),
|
|
6314
|
+
remoteUrl: text("remote_url").notNull(),
|
|
6315
|
+
integrationRef: text("integration_ref").notNull(),
|
|
6316
|
+
intendedSha: text("intended_sha").notNull(),
|
|
6317
|
+
expectedTip: text("expected_tip").notNull(),
|
|
6318
|
+
fenceRefName: text("fence_ref_name").notNull(),
|
|
6319
|
+
fenceRefSha: text("fence_ref_sha").notNull(),
|
|
6320
|
+
ownerTaskId: text("owner_task_id").notNull(),
|
|
6321
|
+
ownerNodeId: text("owner_node_id").notNull(),
|
|
6322
|
+
ownerIncarnationId: text("owner_incarnation_id").notNull(),
|
|
6323
|
+
fenceToken: bigint("fence_token", { mode: "bigint" }).notNull(),
|
|
6324
|
+
status: text("status").notNull(),
|
|
6325
|
+
resolvedSha: text("resolved_sha"),
|
|
6326
|
+
resolution: text("resolution"),
|
|
6327
|
+
createdAt: text("created_at").notNull(),
|
|
6328
|
+
updatedAt: text("updated_at").notNull(),
|
|
6329
|
+
resolvedAt: text("resolved_at")
|
|
6330
|
+
}, (t) => [primaryKey({ columns: [t.projectId, t.taskId, t.repoRelPath] }), check("workspace_land_intents_status_check", sql`${t.status} IN ('pending', 'recorded', 'abandoned')`), check("workspace_land_intents_resolution_check", sql`${t.resolution} IS NULL OR ${t.resolution} IN ('landed', 'not-landed')`), index("idxWorkspaceLandIntentsStatus").on(t.projectId, t.status)]);
|
|
6280
6331
|
var symbolLocks = projectSchema.table("symbol_locks", {
|
|
6281
6332
|
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6282
6333
|
symbolKey: text("symbol_key").notNull(),
|
|
@@ -8851,6 +8902,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8851
8902
|
Critical-action confirmation dialogs stay enabled by default. This global-only preference may opt an operator into primary/default auto-approval, but project settings cannot enable it for collaborators.
|
|
8852
8903
|
*/
|
|
8853
8904
|
skipConfirmationDialogs: false,
|
|
8905
|
+
/*
|
|
8906
|
+
FNXC:QuickEntry 2026-08-16-03:15:
|
|
8907
|
+
Quick Add keeps its historical Enter-to-submit behavior by default; only an operator's global preference may opt into newline-first entry.
|
|
8908
|
+
*/
|
|
8909
|
+
quickAddSubmitOnEnter: true,
|
|
8854
8910
|
language: void 0,
|
|
8855
8911
|
defaultProvider: void 0,
|
|
8856
8912
|
defaultCredentialInstanceId: void 0,
|
|
@@ -9313,9 +9369,6 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9313
9369
|
* New and unconfigured projects default AI merge to sync a dirty checked-out integration branch, restoring the legacy stash → fast-forward → restore landing behavior. Explicit persisted merger.allowDirtyLocalCheckoutSync values still win, and no existing-project migration stamps this default into storage.
|
|
9314
9370
|
*/
|
|
9315
9371
|
merger: { mode: "ai", maxReviewPasses: 3, allowDirtyLocalCheckoutSync: true },
|
|
9316
|
-
mergeDiffVolumeMinLines: void 0,
|
|
9317
|
-
mergeDiffVolumeThreshold: void 0,
|
|
9318
|
-
mergeDiffVolumeAllowlist: void 0,
|
|
9319
9372
|
requiredChecks: void 0,
|
|
9320
9373
|
mergeStrategyOverlapBehavior: "flip-to-prefer-branch",
|
|
9321
9374
|
postMergeAuditMode: "warn",
|
|
@@ -9911,6 +9964,14 @@ function completionSummaryNode(column) {
|
|
|
9911
9964
|
};
|
|
9912
9965
|
}
|
|
9913
9966
|
|
|
9967
|
+
// ../core/src/secrets/redact-secrets.ts
|
|
9968
|
+
function redactSecrets(text2) {
|
|
9969
|
+
return text2.replace(/(authorization\s*[:=]\s*)(bearer\s+)?[^\s,;"']+/gi, "$1$2[REDACTED]").replace(/\b(bearer)\s+[A-Za-z0-9._\-+/=]+/gi, "$1 [REDACTED]").replace(
|
|
9970
|
+
/\b((?:api[_-]?key|key|token|secret|password|passwd|pwd|access[_-]?token|refresh[_-]?token|client[_-]?secret)\s*[:=]\s*)("?)[^\s,;"']+\2/gi,
|
|
9971
|
+
"$1$2[REDACTED]$2"
|
|
9972
|
+
).replace(/\b(sk-|ghp_|gho_|github_pat_|xox[abpr]-|AKIA)[A-Za-z0-9_-]{8,}/g, "[REDACTED]").replace(/\b[A-Za-z0-9+/]{40,}={0,2}\b/g, "[REDACTED]").replace(/\b[0-9a-fA-F]{32,}\b/g, "[REDACTED]");
|
|
9973
|
+
}
|
|
9974
|
+
|
|
9914
9975
|
// ../core/src/missions/mission-types.ts
|
|
9915
9976
|
var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
|
|
9916
9977
|
|
|
@@ -17966,10 +18027,6 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
17966
18027
|
};
|
|
17967
18028
|
await this.writeAgent(updated);
|
|
17968
18029
|
this.emit("agent:stateChanged", agentId, currentState, newState);
|
|
17969
|
-
if (this.asyncLayer) try {
|
|
17970
|
-
await appendAgentActivityEvent(this.asyncLayer, { type: "agent:state-changed", attributionClaim: resolveAgentActivityAttribution([{ id: agentId, provenance: "roster" }], "executor"), taskId: updated.taskId, occurredAt: updated.updatedAt, discriminator: updated.updatedAt, metadata: { fromState: currentState, toState: newState, source: "update" } });
|
|
17971
|
-
} catch {
|
|
17972
|
-
}
|
|
17973
18030
|
this.emit("agent:updated", updated, currentState);
|
|
17974
18031
|
return updated;
|
|
17975
18032
|
});
|
|
@@ -18461,10 +18518,10 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18461
18518
|
return agents2;
|
|
18462
18519
|
}
|
|
18463
18520
|
/*
|
|
18464
|
-
FNXC:MemoryAgent 2026-08-
|
|
18465
|
-
Memory Keeper is custom because it is not a workflow-stage principal.
|
|
18466
|
-
|
|
18467
|
-
|
|
18521
|
+
FNXC:MemoryAgent 2026-08-16-02:31:
|
|
18522
|
+
Memory Keeper is custom because it is not a workflow-stage principal. Its heartbeat defaults off
|
|
18523
|
+
until an operator opts in, while auto-claim remains off because it only maintains memory. This
|
|
18524
|
+
runs during init, where createAgent name collisions would abort startup; preflight probes,
|
|
18468
18525
|
a fallback name, a null degraded result, and the init-side catch keep an operator's same-named
|
|
18469
18526
|
agent untouched and the project runnable.
|
|
18470
18527
|
*/
|
|
@@ -18490,7 +18547,13 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18490
18547
|
roles: [...BUILTIN_MEMORY_AGENT_DEFAULT.roles],
|
|
18491
18548
|
title: BUILTIN_MEMORY_AGENT_DEFAULT.title,
|
|
18492
18549
|
metadata: { [BUILTIN_MEMORY_AGENT_PROVENANCE_KEY]: true },
|
|
18493
|
-
|
|
18550
|
+
/*
|
|
18551
|
+
FNXC:MemoryAgent 2026-08-16-02:31:
|
|
18552
|
+
Memory consolidation is opt-in: newly provisioned Memory Keepers must not begin
|
|
18553
|
+
hourly autonomous heartbeats until an operator enables the existing heartbeat toggle.
|
|
18554
|
+
Keep auto-claim off and the one-hour interval ready for that later opt-in.
|
|
18555
|
+
*/
|
|
18556
|
+
runtimeConfig: { enabled: false, autoClaimRelevantTasks: false, heartbeatIntervalMs: 36e5 },
|
|
18494
18557
|
instructionsText: BUILTIN_MEMORY_AGENT_DEFAULT.instructionsText,
|
|
18495
18558
|
soul: BUILTIN_MEMORY_AGENT_DEFAULT.soul,
|
|
18496
18559
|
bundleConfig: { ...BUILTIN_MEMORY_AGENT_DEFAULT.bundleConfig, files: [...BUILTIN_MEMORY_AGENT_DEFAULT.bundleConfig.files] }
|
|
@@ -18505,7 +18568,9 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18505
18568
|
return owner;
|
|
18506
18569
|
}
|
|
18507
18570
|
const metadata = { ...owner.metadata ?? {}, [BUILTIN_MEMORY_AGENT_PROVENANCE_KEY]: true };
|
|
18508
|
-
const
|
|
18571
|
+
const currentRuntimeConfig = owner.runtimeConfig ?? {};
|
|
18572
|
+
const enabled = typeof currentRuntimeConfig.enabled === "boolean" ? currentRuntimeConfig.enabled : false;
|
|
18573
|
+
const runtimeConfig = currentRuntimeConfig.enabled === enabled && currentRuntimeConfig.autoClaimRelevantTasks === false && currentRuntimeConfig.heartbeatIntervalMs === DEFAULT_AGENT_HEARTBEAT_INTERVAL_MS ? currentRuntimeConfig : { ...currentRuntimeConfig, enabled, autoClaimRelevantTasks: false, heartbeatIntervalMs: DEFAULT_AGENT_HEARTBEAT_INTERVAL_MS };
|
|
18509
18574
|
const updates = {
|
|
18510
18575
|
roles: [...BUILTIN_MEMORY_AGENT_DEFAULT.roles],
|
|
18511
18576
|
role: "custom",
|
|
@@ -18515,7 +18580,9 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18515
18580
|
instructionsText: owner.instructionsText?.trim() ? owner.instructionsText : BUILTIN_MEMORY_AGENT_DEFAULT.instructionsText,
|
|
18516
18581
|
soul: owner.soul?.trim() ? owner.soul : BUILTIN_MEMORY_AGENT_DEFAULT.soul
|
|
18517
18582
|
};
|
|
18518
|
-
|
|
18583
|
+
const nextOwner = { ...owner, ...updates };
|
|
18584
|
+
if (JSON.stringify(nextOwner) === JSON.stringify(owner)) return owner;
|
|
18585
|
+
owner = { ...nextOwner, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
18519
18586
|
await this.writeAgent(owner, executor);
|
|
18520
18587
|
return owner;
|
|
18521
18588
|
};
|
|
@@ -19387,19 +19454,6 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
19387
19454
|
this.agentSnapshotCache.set(agent.id, this.watchSnapshotOf(agent));
|
|
19388
19455
|
if (stateChanged) {
|
|
19389
19456
|
this.emit("agent:stateChanged", agent.id, previousState, agent.state);
|
|
19390
|
-
if (this.asyncLayer) {
|
|
19391
|
-
try {
|
|
19392
|
-
await appendAgentActivityEvent(this.asyncLayer, {
|
|
19393
|
-
type: "agent:state-changed",
|
|
19394
|
-
attributionClaim: resolveAgentActivityAttribution([{ id: agent.id, provenance: "roster" }], "executor"),
|
|
19395
|
-
taskId: agent.taskId,
|
|
19396
|
-
occurredAt: agent.updatedAt,
|
|
19397
|
-
discriminator: agent.updatedAt,
|
|
19398
|
-
metadata: { fromState: previousState, toState: agent.state, source: "reconciliation" }
|
|
19399
|
-
});
|
|
19400
|
-
} catch {
|
|
19401
|
-
}
|
|
19402
|
-
}
|
|
19403
19457
|
this.emit("agent:updated", agent, previousState);
|
|
19404
19458
|
} else {
|
|
19405
19459
|
this.emit("agent:updated", agent);
|
|
@@ -36609,7 +36663,7 @@ function captureStderr(child) {
|
|
|
36609
36663
|
raw = raw.slice(raw.length - STDERR_BUFFER_CEILING);
|
|
36610
36664
|
}
|
|
36611
36665
|
});
|
|
36612
|
-
return () =>
|
|
36666
|
+
return () => redactSecrets(raw);
|
|
36613
36667
|
}
|
|
36614
36668
|
|
|
36615
36669
|
// ../../plugins/fusion-plugin-acp-runtime/src/tool-mapping.ts
|
|
@@ -5776,7 +5776,9 @@ __export(project_exports, {
|
|
|
5776
5776
|
workflowSettings: () => workflowSettings,
|
|
5777
5777
|
workflowSteps: () => workflowSteps,
|
|
5778
5778
|
workflowWorkItems: () => workflowWorkItems,
|
|
5779
|
-
workflows: () => workflows
|
|
5779
|
+
workflows: () => workflows,
|
|
5780
|
+
workspaceCoordinationLeases: () => workspaceCoordinationLeases,
|
|
5781
|
+
workspaceLandIntents: () => workspaceLandIntents
|
|
5780
5782
|
});
|
|
5781
5783
|
var projectSchema = pgSchema(PROJECT_SCHEMA);
|
|
5782
5784
|
var tasks = projectSchema.table("tasks", {
|
|
@@ -6043,6 +6045,9 @@ var tasks = projectSchema.table("tasks", {
|
|
|
6043
6045
|
the gate is a full tasks-table scan. Sparse: most rows have NULL parent.
|
|
6044
6046
|
*/
|
|
6045
6047
|
index("idxTasksSourceParentTaskId").on(t.sourceParentTaskId),
|
|
6048
|
+
/* FNXC:TaskRecommendations 2026-08-13-22:23: duplicate intake filters source
|
|
6049
|
+
* lineage on recommendation/agent creates; this sparse index avoids a task-table scan. */
|
|
6050
|
+
index("idxTasksProjectSourceAgentId").on(t.projectId, t.sourceAgentId).where(sql`${t.sourceAgentId} IS NOT NULL`),
|
|
6046
6051
|
// FNXC:EphemeralAgentTaskCreation 2026-07-30-12:00: proposal retries share one stable key, so the database—not a read-before-create race—enforces at-most-once materialization.
|
|
6047
6052
|
uniqueIndex("uqTasksProjectProposalClaimId").on(t.projectId, t.proposalClaimId).where(sql`${t.proposalClaimId} IS NOT NULL`),
|
|
6048
6053
|
/*
|
|
@@ -6277,6 +6282,52 @@ var distributedTaskIdReservations = projectSchema.table("distributed_task_id_res
|
|
|
6277
6282
|
index("idxDistributedTaskIdReservationsPrefixStatus").on(t.prefix, t.status),
|
|
6278
6283
|
index("idxDistributedTaskIdReservationsExpiry").on(t.status, t.expiresAt)
|
|
6279
6284
|
]);
|
|
6285
|
+
var workspaceCoordinationLeases = projectSchema.table("workspace_coordination_leases", {
|
|
6286
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6287
|
+
leaseKey: text("lease_key").notNull(),
|
|
6288
|
+
kind: text("kind").notNull(),
|
|
6289
|
+
ownerTaskId: text("owner_task_id").notNull(),
|
|
6290
|
+
ownerNodeId: text("owner_node_id").notNull(),
|
|
6291
|
+
ownerIncarnationId: text("owner_incarnation_id").notNull(),
|
|
6292
|
+
ownerRunId: text("owner_run_id"),
|
|
6293
|
+
fenceToken: bigint("fence_token", { mode: "bigint" }).notNull().default(sql`0`),
|
|
6294
|
+
fenceRefName: text("fence_ref_name"),
|
|
6295
|
+
fenceRefSha: text("fence_ref_sha"),
|
|
6296
|
+
status: text("status").notNull(),
|
|
6297
|
+
acquiredAt: text("acquired_at").notNull(),
|
|
6298
|
+
renewedAt: text("renewed_at").notNull(),
|
|
6299
|
+
expiresAt: text("expires_at").notNull(),
|
|
6300
|
+
createdAt: text("created_at").notNull(),
|
|
6301
|
+
updatedAt: text("updated_at").notNull()
|
|
6302
|
+
}, (t) => [
|
|
6303
|
+
primaryKey({ columns: [t.projectId, t.leaseKey] }),
|
|
6304
|
+
check("workspace_coordination_leases_kind_check", sql`${t.kind} IN ('acquire', 'land', 'merge-dispatch')`),
|
|
6305
|
+
check("workspace_coordination_leases_status_check", sql`${t.status} IN ('held', 'released', 'expired')`),
|
|
6306
|
+
index("idxWorkspaceCoordinationLeasesOwnerTask").on(t.projectId, t.ownerTaskId),
|
|
6307
|
+
index("idxWorkspaceCoordinationLeasesOwnerNode").on(t.projectId, t.ownerNodeId),
|
|
6308
|
+
index("idxWorkspaceCoordinationLeasesExpiry").on(t.status, t.expiresAt)
|
|
6309
|
+
]);
|
|
6310
|
+
var workspaceLandIntents = projectSchema.table("workspace_land_intents", {
|
|
6311
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6312
|
+
taskId: text("task_id").notNull(),
|
|
6313
|
+
repoRelPath: text("repo_rel_path").notNull(),
|
|
6314
|
+
remoteUrl: text("remote_url").notNull(),
|
|
6315
|
+
integrationRef: text("integration_ref").notNull(),
|
|
6316
|
+
intendedSha: text("intended_sha").notNull(),
|
|
6317
|
+
expectedTip: text("expected_tip").notNull(),
|
|
6318
|
+
fenceRefName: text("fence_ref_name").notNull(),
|
|
6319
|
+
fenceRefSha: text("fence_ref_sha").notNull(),
|
|
6320
|
+
ownerTaskId: text("owner_task_id").notNull(),
|
|
6321
|
+
ownerNodeId: text("owner_node_id").notNull(),
|
|
6322
|
+
ownerIncarnationId: text("owner_incarnation_id").notNull(),
|
|
6323
|
+
fenceToken: bigint("fence_token", { mode: "bigint" }).notNull(),
|
|
6324
|
+
status: text("status").notNull(),
|
|
6325
|
+
resolvedSha: text("resolved_sha"),
|
|
6326
|
+
resolution: text("resolution"),
|
|
6327
|
+
createdAt: text("created_at").notNull(),
|
|
6328
|
+
updatedAt: text("updated_at").notNull(),
|
|
6329
|
+
resolvedAt: text("resolved_at")
|
|
6330
|
+
}, (t) => [primaryKey({ columns: [t.projectId, t.taskId, t.repoRelPath] }), check("workspace_land_intents_status_check", sql`${t.status} IN ('pending', 'recorded', 'abandoned')`), check("workspace_land_intents_resolution_check", sql`${t.resolution} IS NULL OR ${t.resolution} IN ('landed', 'not-landed')`), index("idxWorkspaceLandIntentsStatus").on(t.projectId, t.status)]);
|
|
6280
6331
|
var symbolLocks = projectSchema.table("symbol_locks", {
|
|
6281
6332
|
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6282
6333
|
symbolKey: text("symbol_key").notNull(),
|
|
@@ -8851,6 +8902,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8851
8902
|
Critical-action confirmation dialogs stay enabled by default. This global-only preference may opt an operator into primary/default auto-approval, but project settings cannot enable it for collaborators.
|
|
8852
8903
|
*/
|
|
8853
8904
|
skipConfirmationDialogs: false,
|
|
8905
|
+
/*
|
|
8906
|
+
FNXC:QuickEntry 2026-08-16-03:15:
|
|
8907
|
+
Quick Add keeps its historical Enter-to-submit behavior by default; only an operator's global preference may opt into newline-first entry.
|
|
8908
|
+
*/
|
|
8909
|
+
quickAddSubmitOnEnter: true,
|
|
8854
8910
|
language: void 0,
|
|
8855
8911
|
defaultProvider: void 0,
|
|
8856
8912
|
defaultCredentialInstanceId: void 0,
|
|
@@ -9313,9 +9369,6 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9313
9369
|
* New and unconfigured projects default AI merge to sync a dirty checked-out integration branch, restoring the legacy stash → fast-forward → restore landing behavior. Explicit persisted merger.allowDirtyLocalCheckoutSync values still win, and no existing-project migration stamps this default into storage.
|
|
9314
9370
|
*/
|
|
9315
9371
|
merger: { mode: "ai", maxReviewPasses: 3, allowDirtyLocalCheckoutSync: true },
|
|
9316
|
-
mergeDiffVolumeMinLines: void 0,
|
|
9317
|
-
mergeDiffVolumeThreshold: void 0,
|
|
9318
|
-
mergeDiffVolumeAllowlist: void 0,
|
|
9319
9372
|
requiredChecks: void 0,
|
|
9320
9373
|
mergeStrategyOverlapBehavior: "flip-to-prefer-branch",
|
|
9321
9374
|
postMergeAuditMode: "warn",
|
|
@@ -9911,6 +9964,14 @@ function completionSummaryNode(column) {
|
|
|
9911
9964
|
};
|
|
9912
9965
|
}
|
|
9913
9966
|
|
|
9967
|
+
// ../core/src/secrets/redact-secrets.ts
|
|
9968
|
+
function redactSecrets(text2) {
|
|
9969
|
+
return text2.replace(/(authorization\s*[:=]\s*)(bearer\s+)?[^\s,;"']+/gi, "$1$2[REDACTED]").replace(/\b(bearer)\s+[A-Za-z0-9._\-+/=]+/gi, "$1 [REDACTED]").replace(
|
|
9970
|
+
/\b((?:api[_-]?key|key|token|secret|password|passwd|pwd|access[_-]?token|refresh[_-]?token|client[_-]?secret)\s*[:=]\s*)("?)[^\s,;"']+\2/gi,
|
|
9971
|
+
"$1$2[REDACTED]$2"
|
|
9972
|
+
).replace(/\b(sk-|ghp_|gho_|github_pat_|xox[abpr]-|AKIA)[A-Za-z0-9_-]{8,}/g, "[REDACTED]").replace(/\b[A-Za-z0-9+/]{40,}={0,2}\b/g, "[REDACTED]").replace(/\b[0-9a-fA-F]{32,}\b/g, "[REDACTED]");
|
|
9973
|
+
}
|
|
9974
|
+
|
|
9914
9975
|
// ../core/src/missions/mission-types.ts
|
|
9915
9976
|
var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
|
|
9916
9977
|
|
|
@@ -17966,10 +18027,6 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
17966
18027
|
};
|
|
17967
18028
|
await this.writeAgent(updated);
|
|
17968
18029
|
this.emit("agent:stateChanged", agentId, currentState, newState);
|
|
17969
|
-
if (this.asyncLayer) try {
|
|
17970
|
-
await appendAgentActivityEvent(this.asyncLayer, { type: "agent:state-changed", attributionClaim: resolveAgentActivityAttribution([{ id: agentId, provenance: "roster" }], "executor"), taskId: updated.taskId, occurredAt: updated.updatedAt, discriminator: updated.updatedAt, metadata: { fromState: currentState, toState: newState, source: "update" } });
|
|
17971
|
-
} catch {
|
|
17972
|
-
}
|
|
17973
18030
|
this.emit("agent:updated", updated, currentState);
|
|
17974
18031
|
return updated;
|
|
17975
18032
|
});
|
|
@@ -18461,10 +18518,10 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18461
18518
|
return agents2;
|
|
18462
18519
|
}
|
|
18463
18520
|
/*
|
|
18464
|
-
FNXC:MemoryAgent 2026-08-
|
|
18465
|
-
Memory Keeper is custom because it is not a workflow-stage principal.
|
|
18466
|
-
|
|
18467
|
-
|
|
18521
|
+
FNXC:MemoryAgent 2026-08-16-02:31:
|
|
18522
|
+
Memory Keeper is custom because it is not a workflow-stage principal. Its heartbeat defaults off
|
|
18523
|
+
until an operator opts in, while auto-claim remains off because it only maintains memory. This
|
|
18524
|
+
runs during init, where createAgent name collisions would abort startup; preflight probes,
|
|
18468
18525
|
a fallback name, a null degraded result, and the init-side catch keep an operator's same-named
|
|
18469
18526
|
agent untouched and the project runnable.
|
|
18470
18527
|
*/
|
|
@@ -18490,7 +18547,13 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18490
18547
|
roles: [...BUILTIN_MEMORY_AGENT_DEFAULT.roles],
|
|
18491
18548
|
title: BUILTIN_MEMORY_AGENT_DEFAULT.title,
|
|
18492
18549
|
metadata: { [BUILTIN_MEMORY_AGENT_PROVENANCE_KEY]: true },
|
|
18493
|
-
|
|
18550
|
+
/*
|
|
18551
|
+
FNXC:MemoryAgent 2026-08-16-02:31:
|
|
18552
|
+
Memory consolidation is opt-in: newly provisioned Memory Keepers must not begin
|
|
18553
|
+
hourly autonomous heartbeats until an operator enables the existing heartbeat toggle.
|
|
18554
|
+
Keep auto-claim off and the one-hour interval ready for that later opt-in.
|
|
18555
|
+
*/
|
|
18556
|
+
runtimeConfig: { enabled: false, autoClaimRelevantTasks: false, heartbeatIntervalMs: 36e5 },
|
|
18494
18557
|
instructionsText: BUILTIN_MEMORY_AGENT_DEFAULT.instructionsText,
|
|
18495
18558
|
soul: BUILTIN_MEMORY_AGENT_DEFAULT.soul,
|
|
18496
18559
|
bundleConfig: { ...BUILTIN_MEMORY_AGENT_DEFAULT.bundleConfig, files: [...BUILTIN_MEMORY_AGENT_DEFAULT.bundleConfig.files] }
|
|
@@ -18505,7 +18568,9 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18505
18568
|
return owner;
|
|
18506
18569
|
}
|
|
18507
18570
|
const metadata = { ...owner.metadata ?? {}, [BUILTIN_MEMORY_AGENT_PROVENANCE_KEY]: true };
|
|
18508
|
-
const
|
|
18571
|
+
const currentRuntimeConfig = owner.runtimeConfig ?? {};
|
|
18572
|
+
const enabled = typeof currentRuntimeConfig.enabled === "boolean" ? currentRuntimeConfig.enabled : false;
|
|
18573
|
+
const runtimeConfig = currentRuntimeConfig.enabled === enabled && currentRuntimeConfig.autoClaimRelevantTasks === false && currentRuntimeConfig.heartbeatIntervalMs === DEFAULT_AGENT_HEARTBEAT_INTERVAL_MS ? currentRuntimeConfig : { ...currentRuntimeConfig, enabled, autoClaimRelevantTasks: false, heartbeatIntervalMs: DEFAULT_AGENT_HEARTBEAT_INTERVAL_MS };
|
|
18509
18574
|
const updates = {
|
|
18510
18575
|
roles: [...BUILTIN_MEMORY_AGENT_DEFAULT.roles],
|
|
18511
18576
|
role: "custom",
|
|
@@ -18515,7 +18580,9 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18515
18580
|
instructionsText: owner.instructionsText?.trim() ? owner.instructionsText : BUILTIN_MEMORY_AGENT_DEFAULT.instructionsText,
|
|
18516
18581
|
soul: owner.soul?.trim() ? owner.soul : BUILTIN_MEMORY_AGENT_DEFAULT.soul
|
|
18517
18582
|
};
|
|
18518
|
-
|
|
18583
|
+
const nextOwner = { ...owner, ...updates };
|
|
18584
|
+
if (JSON.stringify(nextOwner) === JSON.stringify(owner)) return owner;
|
|
18585
|
+
owner = { ...nextOwner, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
18519
18586
|
await this.writeAgent(owner, executor);
|
|
18520
18587
|
return owner;
|
|
18521
18588
|
};
|
|
@@ -19387,19 +19454,6 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
19387
19454
|
this.agentSnapshotCache.set(agent.id, this.watchSnapshotOf(agent));
|
|
19388
19455
|
if (stateChanged) {
|
|
19389
19456
|
this.emit("agent:stateChanged", agent.id, previousState, agent.state);
|
|
19390
|
-
if (this.asyncLayer) {
|
|
19391
|
-
try {
|
|
19392
|
-
await appendAgentActivityEvent(this.asyncLayer, {
|
|
19393
|
-
type: "agent:state-changed",
|
|
19394
|
-
attributionClaim: resolveAgentActivityAttribution([{ id: agent.id, provenance: "roster" }], "executor"),
|
|
19395
|
-
taskId: agent.taskId,
|
|
19396
|
-
occurredAt: agent.updatedAt,
|
|
19397
|
-
discriminator: agent.updatedAt,
|
|
19398
|
-
metadata: { fromState: previousState, toState: agent.state, source: "reconciliation" }
|
|
19399
|
-
});
|
|
19400
|
-
} catch {
|
|
19401
|
-
}
|
|
19402
|
-
}
|
|
19403
19457
|
this.emit("agent:updated", agent, previousState);
|
|
19404
19458
|
} else {
|
|
19405
19459
|
this.emit("agent:updated", agent);
|
|
@@ -36599,7 +36653,7 @@ function captureStderr(child) {
|
|
|
36599
36653
|
raw = raw.slice(raw.length - STDERR_BUFFER_CEILING);
|
|
36600
36654
|
}
|
|
36601
36655
|
});
|
|
36602
|
-
return () =>
|
|
36656
|
+
return () => redactSecrets(raw);
|
|
36603
36657
|
}
|
|
36604
36658
|
|
|
36605
36659
|
// ../../plugins/fusion-plugin-claude-runtime/src/acp/tool-mapping.ts
|
|
@@ -5804,7 +5804,9 @@ __export(project_exports, {
|
|
|
5804
5804
|
workflowSettings: () => workflowSettings,
|
|
5805
5805
|
workflowSteps: () => workflowSteps,
|
|
5806
5806
|
workflowWorkItems: () => workflowWorkItems,
|
|
5807
|
-
workflows: () => workflows
|
|
5807
|
+
workflows: () => workflows,
|
|
5808
|
+
workspaceCoordinationLeases: () => workspaceCoordinationLeases,
|
|
5809
|
+
workspaceLandIntents: () => workspaceLandIntents
|
|
5808
5810
|
});
|
|
5809
5811
|
var projectSchema = pgSchema(PROJECT_SCHEMA);
|
|
5810
5812
|
var tasks = projectSchema.table("tasks", {
|
|
@@ -6071,6 +6073,9 @@ var tasks = projectSchema.table("tasks", {
|
|
|
6071
6073
|
the gate is a full tasks-table scan. Sparse: most rows have NULL parent.
|
|
6072
6074
|
*/
|
|
6073
6075
|
index("idxTasksSourceParentTaskId").on(t.sourceParentTaskId),
|
|
6076
|
+
/* FNXC:TaskRecommendations 2026-08-13-22:23: duplicate intake filters source
|
|
6077
|
+
* lineage on recommendation/agent creates; this sparse index avoids a task-table scan. */
|
|
6078
|
+
index("idxTasksProjectSourceAgentId").on(t.projectId, t.sourceAgentId).where(sql`${t.sourceAgentId} IS NOT NULL`),
|
|
6074
6079
|
// FNXC:EphemeralAgentTaskCreation 2026-07-30-12:00: proposal retries share one stable key, so the database—not a read-before-create race—enforces at-most-once materialization.
|
|
6075
6080
|
uniqueIndex("uqTasksProjectProposalClaimId").on(t.projectId, t.proposalClaimId).where(sql`${t.proposalClaimId} IS NOT NULL`),
|
|
6076
6081
|
/*
|
|
@@ -6305,6 +6310,52 @@ var distributedTaskIdReservations = projectSchema.table("distributed_task_id_res
|
|
|
6305
6310
|
index("idxDistributedTaskIdReservationsPrefixStatus").on(t.prefix, t.status),
|
|
6306
6311
|
index("idxDistributedTaskIdReservationsExpiry").on(t.status, t.expiresAt)
|
|
6307
6312
|
]);
|
|
6313
|
+
var workspaceCoordinationLeases = projectSchema.table("workspace_coordination_leases", {
|
|
6314
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6315
|
+
leaseKey: text("lease_key").notNull(),
|
|
6316
|
+
kind: text("kind").notNull(),
|
|
6317
|
+
ownerTaskId: text("owner_task_id").notNull(),
|
|
6318
|
+
ownerNodeId: text("owner_node_id").notNull(),
|
|
6319
|
+
ownerIncarnationId: text("owner_incarnation_id").notNull(),
|
|
6320
|
+
ownerRunId: text("owner_run_id"),
|
|
6321
|
+
fenceToken: bigint("fence_token", { mode: "bigint" }).notNull().default(sql`0`),
|
|
6322
|
+
fenceRefName: text("fence_ref_name"),
|
|
6323
|
+
fenceRefSha: text("fence_ref_sha"),
|
|
6324
|
+
status: text("status").notNull(),
|
|
6325
|
+
acquiredAt: text("acquired_at").notNull(),
|
|
6326
|
+
renewedAt: text("renewed_at").notNull(),
|
|
6327
|
+
expiresAt: text("expires_at").notNull(),
|
|
6328
|
+
createdAt: text("created_at").notNull(),
|
|
6329
|
+
updatedAt: text("updated_at").notNull()
|
|
6330
|
+
}, (t) => [
|
|
6331
|
+
primaryKey({ columns: [t.projectId, t.leaseKey] }),
|
|
6332
|
+
check("workspace_coordination_leases_kind_check", sql`${t.kind} IN ('acquire', 'land', 'merge-dispatch')`),
|
|
6333
|
+
check("workspace_coordination_leases_status_check", sql`${t.status} IN ('held', 'released', 'expired')`),
|
|
6334
|
+
index("idxWorkspaceCoordinationLeasesOwnerTask").on(t.projectId, t.ownerTaskId),
|
|
6335
|
+
index("idxWorkspaceCoordinationLeasesOwnerNode").on(t.projectId, t.ownerNodeId),
|
|
6336
|
+
index("idxWorkspaceCoordinationLeasesExpiry").on(t.status, t.expiresAt)
|
|
6337
|
+
]);
|
|
6338
|
+
var workspaceLandIntents = projectSchema.table("workspace_land_intents", {
|
|
6339
|
+
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6340
|
+
taskId: text("task_id").notNull(),
|
|
6341
|
+
repoRelPath: text("repo_rel_path").notNull(),
|
|
6342
|
+
remoteUrl: text("remote_url").notNull(),
|
|
6343
|
+
integrationRef: text("integration_ref").notNull(),
|
|
6344
|
+
intendedSha: text("intended_sha").notNull(),
|
|
6345
|
+
expectedTip: text("expected_tip").notNull(),
|
|
6346
|
+
fenceRefName: text("fence_ref_name").notNull(),
|
|
6347
|
+
fenceRefSha: text("fence_ref_sha").notNull(),
|
|
6348
|
+
ownerTaskId: text("owner_task_id").notNull(),
|
|
6349
|
+
ownerNodeId: text("owner_node_id").notNull(),
|
|
6350
|
+
ownerIncarnationId: text("owner_incarnation_id").notNull(),
|
|
6351
|
+
fenceToken: bigint("fence_token", { mode: "bigint" }).notNull(),
|
|
6352
|
+
status: text("status").notNull(),
|
|
6353
|
+
resolvedSha: text("resolved_sha"),
|
|
6354
|
+
resolution: text("resolution"),
|
|
6355
|
+
createdAt: text("created_at").notNull(),
|
|
6356
|
+
updatedAt: text("updated_at").notNull(),
|
|
6357
|
+
resolvedAt: text("resolved_at")
|
|
6358
|
+
}, (t) => [primaryKey({ columns: [t.projectId, t.taskId, t.repoRelPath] }), check("workspace_land_intents_status_check", sql`${t.status} IN ('pending', 'recorded', 'abandoned')`), check("workspace_land_intents_resolution_check", sql`${t.resolution} IS NULL OR ${t.resolution} IN ('landed', 'not-landed')`), index("idxWorkspaceLandIntentsStatus").on(t.projectId, t.status)]);
|
|
6308
6359
|
var symbolLocks = projectSchema.table("symbol_locks", {
|
|
6309
6360
|
projectId: text("project_id").notNull().default(sql`current_setting('fusion.project_id', true)`),
|
|
6310
6361
|
symbolKey: text("symbol_key").notNull(),
|
|
@@ -8971,6 +9022,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
8971
9022
|
Critical-action confirmation dialogs stay enabled by default. This global-only preference may opt an operator into primary/default auto-approval, but project settings cannot enable it for collaborators.
|
|
8972
9023
|
*/
|
|
8973
9024
|
skipConfirmationDialogs: false,
|
|
9025
|
+
/*
|
|
9026
|
+
FNXC:QuickEntry 2026-08-16-03:15:
|
|
9027
|
+
Quick Add keeps its historical Enter-to-submit behavior by default; only an operator's global preference may opt into newline-first entry.
|
|
9028
|
+
*/
|
|
9029
|
+
quickAddSubmitOnEnter: true,
|
|
8974
9030
|
language: void 0,
|
|
8975
9031
|
defaultProvider: void 0,
|
|
8976
9032
|
defaultCredentialInstanceId: void 0,
|
|
@@ -9433,9 +9489,6 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9433
9489
|
* New and unconfigured projects default AI merge to sync a dirty checked-out integration branch, restoring the legacy stash → fast-forward → restore landing behavior. Explicit persisted merger.allowDirtyLocalCheckoutSync values still win, and no existing-project migration stamps this default into storage.
|
|
9434
9490
|
*/
|
|
9435
9491
|
merger: { mode: "ai", maxReviewPasses: 3, allowDirtyLocalCheckoutSync: true },
|
|
9436
|
-
mergeDiffVolumeMinLines: void 0,
|
|
9437
|
-
mergeDiffVolumeThreshold: void 0,
|
|
9438
|
-
mergeDiffVolumeAllowlist: void 0,
|
|
9439
9492
|
requiredChecks: void 0,
|
|
9440
9493
|
mergeStrategyOverlapBehavior: "flip-to-prefer-branch",
|
|
9441
9494
|
postMergeAuditMode: "warn",
|
|
@@ -18086,10 +18139,6 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18086
18139
|
};
|
|
18087
18140
|
await this.writeAgent(updated);
|
|
18088
18141
|
this.emit("agent:stateChanged", agentId, currentState, newState);
|
|
18089
|
-
if (this.asyncLayer) try {
|
|
18090
|
-
await appendAgentActivityEvent(this.asyncLayer, { type: "agent:state-changed", attributionClaim: resolveAgentActivityAttribution([{ id: agentId, provenance: "roster" }], "executor"), taskId: updated.taskId, occurredAt: updated.updatedAt, discriminator: updated.updatedAt, metadata: { fromState: currentState, toState: newState, source: "update" } });
|
|
18091
|
-
} catch {
|
|
18092
|
-
}
|
|
18093
18142
|
this.emit("agent:updated", updated, currentState);
|
|
18094
18143
|
return updated;
|
|
18095
18144
|
});
|
|
@@ -18581,10 +18630,10 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18581
18630
|
return agents2;
|
|
18582
18631
|
}
|
|
18583
18632
|
/*
|
|
18584
|
-
FNXC:MemoryAgent 2026-08-
|
|
18585
|
-
Memory Keeper is custom because it is not a workflow-stage principal.
|
|
18586
|
-
|
|
18587
|
-
|
|
18633
|
+
FNXC:MemoryAgent 2026-08-16-02:31:
|
|
18634
|
+
Memory Keeper is custom because it is not a workflow-stage principal. Its heartbeat defaults off
|
|
18635
|
+
until an operator opts in, while auto-claim remains off because it only maintains memory. This
|
|
18636
|
+
runs during init, where createAgent name collisions would abort startup; preflight probes,
|
|
18588
18637
|
a fallback name, a null degraded result, and the init-side catch keep an operator's same-named
|
|
18589
18638
|
agent untouched and the project runnable.
|
|
18590
18639
|
*/
|
|
@@ -18610,7 +18659,13 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18610
18659
|
roles: [...BUILTIN_MEMORY_AGENT_DEFAULT.roles],
|
|
18611
18660
|
title: BUILTIN_MEMORY_AGENT_DEFAULT.title,
|
|
18612
18661
|
metadata: { [BUILTIN_MEMORY_AGENT_PROVENANCE_KEY]: true },
|
|
18613
|
-
|
|
18662
|
+
/*
|
|
18663
|
+
FNXC:MemoryAgent 2026-08-16-02:31:
|
|
18664
|
+
Memory consolidation is opt-in: newly provisioned Memory Keepers must not begin
|
|
18665
|
+
hourly autonomous heartbeats until an operator enables the existing heartbeat toggle.
|
|
18666
|
+
Keep auto-claim off and the one-hour interval ready for that later opt-in.
|
|
18667
|
+
*/
|
|
18668
|
+
runtimeConfig: { enabled: false, autoClaimRelevantTasks: false, heartbeatIntervalMs: 36e5 },
|
|
18614
18669
|
instructionsText: BUILTIN_MEMORY_AGENT_DEFAULT.instructionsText,
|
|
18615
18670
|
soul: BUILTIN_MEMORY_AGENT_DEFAULT.soul,
|
|
18616
18671
|
bundleConfig: { ...BUILTIN_MEMORY_AGENT_DEFAULT.bundleConfig, files: [...BUILTIN_MEMORY_AGENT_DEFAULT.bundleConfig.files] }
|
|
@@ -18625,7 +18680,9 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18625
18680
|
return owner;
|
|
18626
18681
|
}
|
|
18627
18682
|
const metadata = { ...owner.metadata ?? {}, [BUILTIN_MEMORY_AGENT_PROVENANCE_KEY]: true };
|
|
18628
|
-
const
|
|
18683
|
+
const currentRuntimeConfig = owner.runtimeConfig ?? {};
|
|
18684
|
+
const enabled = typeof currentRuntimeConfig.enabled === "boolean" ? currentRuntimeConfig.enabled : false;
|
|
18685
|
+
const runtimeConfig = currentRuntimeConfig.enabled === enabled && currentRuntimeConfig.autoClaimRelevantTasks === false && currentRuntimeConfig.heartbeatIntervalMs === DEFAULT_AGENT_HEARTBEAT_INTERVAL_MS ? currentRuntimeConfig : { ...currentRuntimeConfig, enabled, autoClaimRelevantTasks: false, heartbeatIntervalMs: DEFAULT_AGENT_HEARTBEAT_INTERVAL_MS };
|
|
18629
18686
|
const updates = {
|
|
18630
18687
|
roles: [...BUILTIN_MEMORY_AGENT_DEFAULT.roles],
|
|
18631
18688
|
role: "custom",
|
|
@@ -18635,7 +18692,9 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18635
18692
|
instructionsText: owner.instructionsText?.trim() ? owner.instructionsText : BUILTIN_MEMORY_AGENT_DEFAULT.instructionsText,
|
|
18636
18693
|
soul: owner.soul?.trim() ? owner.soul : BUILTIN_MEMORY_AGENT_DEFAULT.soul
|
|
18637
18694
|
};
|
|
18638
|
-
|
|
18695
|
+
const nextOwner = { ...owner, ...updates };
|
|
18696
|
+
if (JSON.stringify(nextOwner) === JSON.stringify(owner)) return owner;
|
|
18697
|
+
owner = { ...nextOwner, updatedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
18639
18698
|
await this.writeAgent(owner, executor);
|
|
18640
18699
|
return owner;
|
|
18641
18700
|
};
|
|
@@ -19507,19 +19566,6 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
19507
19566
|
this.agentSnapshotCache.set(agent.id, this.watchSnapshotOf(agent));
|
|
19508
19567
|
if (stateChanged) {
|
|
19509
19568
|
this.emit("agent:stateChanged", agent.id, previousState, agent.state);
|
|
19510
|
-
if (this.asyncLayer) {
|
|
19511
|
-
try {
|
|
19512
|
-
await appendAgentActivityEvent(this.asyncLayer, {
|
|
19513
|
-
type: "agent:state-changed",
|
|
19514
|
-
attributionClaim: resolveAgentActivityAttribution([{ id: agent.id, provenance: "roster" }], "executor"),
|
|
19515
|
-
taskId: agent.taskId,
|
|
19516
|
-
occurredAt: agent.updatedAt,
|
|
19517
|
-
discriminator: agent.updatedAt,
|
|
19518
|
-
metadata: { fromState: previousState, toState: agent.state, source: "reconciliation" }
|
|
19519
|
-
});
|
|
19520
|
-
} catch {
|
|
19521
|
-
}
|
|
19522
|
-
}
|
|
19523
19569
|
this.emit("agent:updated", agent, previousState);
|
|
19524
19570
|
} else {
|
|
19525
19571
|
this.emit("agent:updated", agent);
|