@runfusion/fusion 0.78.0-beta.2 → 0.78.0-beta.4
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 +5142 -5151
- package/dist/child-process-worker.js +3720 -3649
- package/dist/client/.vite/manifest.json +262 -262
- package/dist/client/assets/{AgentDetailView-4tEdPTG2.js → AgentDetailView-BVDrAj1Y.js} +3 -3
- package/dist/client/assets/AgentDetailView-DaSEdzYy.css +1 -0
- package/dist/client/assets/{AgentPermissionPolicyEditor-DIGxjQFE.js → AgentPermissionPolicyEditor--11QLSt_.js} +1 -1
- package/dist/client/assets/{AgentsView-BXFYQAPe.js → AgentsView-D3mLjE0-.js} +4 -4
- package/dist/client/assets/{CommandCenter-vknNrxBN.js → CommandCenter-CPy2a26y.js} +1 -1
- package/dist/client/assets/{DevServerView-COFb49kW.js → DevServerView-CWHhisoR.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-C-wYRUc5.js → DirectoryPicker-DMd9MEtq.js} +1 -1
- package/dist/client/assets/DocumentsView-YeYy6DJV.js +1 -0
- package/dist/client/assets/{EvalsView-BcOgXvPe.js → EvalsView-DfvYGoX4.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-B0zF29ER.js → ExperimentalAgentOnboardingModal-CFjRfBUk.js} +1 -1
- package/dist/client/assets/{GoalsView--Cj2se_t.js → GoalsView-DdlI85_-.js} +1 -1
- package/dist/client/assets/InsightsView-Du2UKeQE.js +11 -0
- package/dist/client/assets/{MemoryView-Ca0Y2fYg.js → MemoryView-DeSuPKc7.js} +1 -1
- package/dist/client/assets/{PatchnodeView--E259o36.js → PatchnodeView-Ow5ErHE3.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-DKKLn5YE.js → PiExtensionsManager-D65p_Z4a.js} +1 -1
- package/dist/client/assets/{PluginManager-e0Rnv7RI.js → PluginManager-BruzVBGM.js} +1 -1
- package/dist/client/assets/{PullRequestView-BFe77u-d.js → PullRequestView-BTzsKxrq.js} +1 -1
- package/dist/client/assets/{ReportModal-DvyDEj8D.js → ReportModal-YpkrGp21.js} +2 -2
- package/dist/client/assets/ResearchView-D0oWTBMk.js +2 -0
- package/dist/client/assets/{SecretsView-DTrrJEt9.js → SecretsView-B6ZH6O1O.js} +1 -1
- package/dist/client/assets/{SettingsModal-DnTX4rMK.js → SettingsModal-CN4NVtbD.js} +1 -1
- package/dist/client/assets/SettingsModal-CmPRFol7.css +1 -0
- package/dist/client/assets/SettingsModal-CwUcFHcw.js +21 -0
- package/dist/client/assets/{SettingsTextareaRow-y3gQ4u_G.js → SettingsTextareaRow-B_iNwevV.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-ClAbtrU0.js → SetupWizardModal-BSAtv8xH.js} +2 -2
- package/dist/client/assets/{SkillsView-BpEJE16a.js → SkillsView-DhhiUAPO.js} +1 -1
- package/dist/client/assets/{WorkflowNodeEditor-CSbhpY5K.js → WorkflowNodeEditor-YeZ_DH3a.js} +1 -1
- package/dist/client/assets/{agent-import-generation-BT0ZBGQA.js → agent-import-generation-BPFU14s8.js} +1 -1
- package/dist/client/assets/{agentsOrgChartLayout-C_tkb_Pq.js → agentsOrgChartLayout-CWqQ9XMW.js} +1 -1
- package/dist/client/assets/app-BVuhE-pB.js +3 -0
- package/dist/client/assets/app-BVz53oEh.js +9 -0
- package/dist/client/assets/app-BfzM5z-d.js +9 -0
- package/dist/client/assets/app-BgtLSw3s.js +9 -0
- package/dist/client/assets/app-BpjF_vWi.js +9 -0
- package/dist/client/assets/app-Cjqb3Hrq.js +3 -0
- package/dist/client/assets/app-CoyPSunU.js +9 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-BfPYqDRS.js → architectureDiagram-3BPJPVTR-DX2xxWsB.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-BEcaGTmc.js → blockDiagram-GPEHLZMM-tVB-pLpH.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-BX1xrinF.js → c4Diagram-AAUBKEIU-BEV-l4nl.js} +1 -1
- package/dist/client/assets/channel-BoqUD_yo.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-OksyoE_c.js → chunk-2J33WTMH-DduonyQt.js} +1 -1
- package/dist/client/assets/{chunk-4BX2VUAB-C5ivKrB5.js → chunk-4BX2VUAB-BPCXybBl.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-C7vkVq-W.js → chunk-55IACEB6-ByqbaUCB.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-c-khhz21.js → chunk-727SXJPM-DdtczHe_.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DwxYJXXQ.js → chunk-AQP2D5EJ-V5pHkNOZ.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-BKhdu4up.js → chunk-FMBD7UC4-i0P_U91V.js} +1 -1
- package/dist/client/assets/{chunk-ND2GUHAM-okVZM2p2.js → chunk-ND2GUHAM-BWdXSws9.js} +1 -1
- package/dist/client/assets/{chunk-QZHKN3VN-DDso7rM3.js → chunk-QZHKN3VN-C7vpw2O4.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-5Yk5cF5o.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-5Yk5cF5o.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-CNT9ltBk.js → cose-bilkent-S5V4N54A-C_OJmqvv.js} +1 -1
- package/dist/client/assets/{dagre-BM42HDAG-C5a30-g5.js → dagre-BM42HDAG-DlxhXtcR.js} +1 -1
- package/dist/client/assets/{dashboard-view-Brqe-SVE.js → dashboard-view-C_aj9Avl.js} +2 -2
- package/dist/client/assets/{dashboard-view-DyAQ_agZ.js → dashboard-view-CtFwciFc.js} +1 -1
- package/dist/client/assets/dashboard-view-Cy2aXOHq.js +1 -0
- package/dist/client/assets/{dashboard-view-WFOf0Kpl.js → dashboard-view-ZNgeI6tK.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-DG7EyUNe.js → diagram-2AECGRRQ-B5OQ5SjT.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-DE7lhEna.js → diagram-5GNKFQAL-OnHyeSDX.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DFtJNqNF.js → diagram-KO2AKTUF-BESRlk6K.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-DUAuxZQD.js → diagram-LMA3HP47-jc5KVOgo.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-DCKETcWy.js → diagram-OG6HWLK6-CbvV1B1C.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-pa0blyAD.js → erDiagram-TEJ5UH35-CU4gukmG.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-D7Veqs1W.js → flowDiagram-I6XJVG4X-Dq9UKge4.js} +1 -1
- package/dist/client/assets/{folder-open-CojKP0zy.js → folder-open-CF9O-sX4.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CsqBMy2D.js → ganttDiagram-6RSMTGT7-BWA_00UM.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-BRrVKZJo.js → gitGraphDiagram-PVQCEYII-DKdPzNtQ.js} +1 -1
- package/dist/client/assets/index-CiVIbypZ.js +2949 -0
- package/dist/client/assets/index-Duxgoh_Y.css +1 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-o2GEmmb2.js → infoDiagram-5YYISTIA-BvusFnLt.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-k1p6nWtj.js → ishikawaDiagram-YF4QCWOH-NLucC59B.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-B43V37S0.js → journeyDiagram-JHISSGLW-OMF0ZqP2.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-HRMYyAQB.js → kanban-definition-UN3LZRKU-DcIw1Gei.js} +1 -1
- package/dist/client/assets/{mermaid.core-6vt3zKxL.js → mermaid.core-BXdGnca4.js} +4 -4
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-D3VJuvfj.js → mindmap-definition-RKZ34NQL-CJdZ2giE.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-D0RjFhk9.js → pieDiagram-4H26LBE5-CIS3IXyQ.js} +1 -1
- package/dist/client/assets/{puzzle-D3dJEsTf.js → puzzle-DLP4jrVO.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-DHaEqU3Q.js → quadrantDiagram-W4KKPZXB-CyXg_FqY.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DnfFCRP0.js → requirementDiagram-4Y6WPE33-Cl5zZfEW.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-D6GCuiqV.js → sankeyDiagram-5OEKKPKP-RPvS_KDe.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DaGYYzxS.js → sequenceDiagram-3UESZ5HK-mqxbDVma.js} +1 -1
- package/dist/client/assets/{standing-instructions-template-CN8Kp4Hq.js → standing-instructions-template-oByMjuf9.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-ek4Wb8ai.js → stateDiagram-AJRCARHV-BMThgwA0.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-EPn8Vq7v.js → stateDiagram-v2-BHNVJYJU-BQQVmi0s.js} +1 -1
- package/dist/client/assets/{timeline-definition-PNZ67QCA-CyAwCbnE.js → timeline-definition-PNZ67QCA-DxRT4zz3.js} +1 -1
- package/dist/client/assets/{upload-BhpNL3xI.js → upload-C1hBXwxT.js} +1 -1
- package/dist/client/assets/{users-Bka1cIkR.js → users-CUTsjdYo.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-Bd8-8r3a.js → vennDiagram-CIIHVFJN-CplrXnmO.js} +1 -1
- package/dist/client/assets/{wardley-L42UT6IY-nNvWflNF.js → wardley-L42UT6IY-DN3nUl9Y.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Dy7XrvPx.js → wardleyDiagram-YWT4CUSO-C0hUcS3e.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-38VTptR4.js → xychartDiagram-2RQKCTM6-CDB05pHe.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 +4041 -4181
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugin-sdk/index.d.ts +108 -101
- package/dist/plugin-sdk/index.js +37 -95
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-linear-import/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
- package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-quality/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-quality/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-todos/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-todos/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +37 -95
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/SKILL.md +1 -1
- package/skill/fusion/references/best-practices.md +2 -2
- package/skill/fusion/references/cli-commands.md +0 -2
- package/skill/fusion/references/engine-tools.md +2 -2
- package/skill/fusion/references/extension-tools.md +1 -18
- package/skill/fusion/references/fusion-capabilities.md +1 -4
- package/skill/fusion/references/task-structure.md +1 -1
- package/skill/fusion/workflows/task-lifecycle.md +5 -9
- package/skill/fusion/workflows/task-management.md +1 -3
- package/dist/client/assets/AgentDetailView-DPoh46Ym.css +0 -1
- package/dist/client/assets/DocumentsView-B-uzhK3C.js +0 -1
- package/dist/client/assets/InsightsView-qMoM8oFe.js +0 -11
- package/dist/client/assets/ResearchView-DROedGZR.js +0 -2
- package/dist/client/assets/SettingsModal-CSbSmwxZ.js +0 -21
- package/dist/client/assets/SettingsModal-Crai1dEI.css +0 -1
- package/dist/client/assets/app-B0hINWeH.js +0 -5
- package/dist/client/assets/app-BSxI9vvS.js +0 -13
- package/dist/client/assets/app-BeDYumHl.js +0 -13
- package/dist/client/assets/app-C8jogXBu.js +0 -13
- package/dist/client/assets/app-C8kudFlj.js +0 -13
- package/dist/client/assets/app-DZ5j1n3j.js +0 -5
- package/dist/client/assets/app-hEhR2PdL.js +0 -13
- package/dist/client/assets/channel-BjDq20V4.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-B114c_Fi.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B114c_Fi.js +0 -1
- package/dist/client/assets/dashboard-view-DxpkE7dL.js +0 -1
- package/dist/client/assets/index-Cv_ouAgx.js +0 -2959
- package/dist/client/assets/index-Dliz9s5K.css +0 -1
|
@@ -9166,6 +9166,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
9166
9166
|
*/
|
|
9167
9167
|
quickAddSubmitOnEnter: true,
|
|
9168
9168
|
/*
|
|
9169
|
+
FNXC:ChatComposer 2026-09-06-01:54:
|
|
9170
|
+
Le comportement automatique des trois composeurs insère une nouvelle ligne pour un pointeur tactile primaire et conserve l’envoi par Entrée avec une souris, y compris dans une fenêtre étroite. Cette préférence d’opérateur reste globale et ne s’applique qu’à Entrée sans Cmd/Ctrl ni Shift, après l’autocomplétion, Shift et la garde IME propre au Chat de tâche.
|
|
9171
|
+
*/
|
|
9172
|
+
chatSubmitOnEnter: "auto",
|
|
9173
|
+
/*
|
|
9169
9174
|
FNXC:ChatSnippets 2026-09-03-15:56:
|
|
9170
9175
|
Keep the optional global key present but undefined so scope-key derivation remains complete without sharing a mutable default array. readChatSnippets supplies a fresh effective empty list.
|
|
9171
9176
|
*/
|
|
@@ -9757,15 +9762,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9757
9762
|
// maxPostReviewFixes MOVED to workflow settings (U4).
|
|
9758
9763
|
// Run maintenance (including WAL checkpointing) every 5 minutes by default.
|
|
9759
9764
|
maintenanceIntervalMs: 3e5,
|
|
9760
|
-
autoArchiveDoneTasksEnabled: true,
|
|
9761
|
-
autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
|
|
9762
|
-
doneAutoArchiveDays: 0,
|
|
9763
|
-
// FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
|
|
9764
|
-
// decide via the near-duplicate flag/UI instead of tasks silently vanishing
|
|
9765
|
-
// into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
|
|
9766
|
-
autoArchiveDuplicateTasksEnabled: false,
|
|
9767
9765
|
triageDuplicateResolution: "prompt",
|
|
9768
|
-
archiveAgentLogMode: "compact",
|
|
9769
9766
|
autoUpdatePrStatus: false,
|
|
9770
9767
|
githubCommentOnDone: false,
|
|
9771
9768
|
githubCommentTemplate: void 0,
|
|
@@ -9860,6 +9857,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9860
9857
|
prTitlePromptInstructions: void 0,
|
|
9861
9858
|
prDescriptionPromptInstructions: void 0,
|
|
9862
9859
|
scripts: void 0,
|
|
9860
|
+
scriptMetadata: void 0,
|
|
9863
9861
|
setupScript: void 0,
|
|
9864
9862
|
insightExtractionEnabled: false,
|
|
9865
9863
|
insightExtractionSchedule: "0 2 * * *",
|
|
@@ -10085,8 +10083,6 @@ var AGENT_PERMISSIONS = [
|
|
|
10085
10083
|
// Merge completed task branches
|
|
10086
10084
|
"tasks:delete",
|
|
10087
10085
|
// Delete tasks
|
|
10088
|
-
"tasks:archive",
|
|
10089
|
-
// Archive/unarchive tasks
|
|
10090
10086
|
"agents:create",
|
|
10091
10087
|
// Create new agents
|
|
10092
10088
|
"agents:update",
|
|
@@ -10334,8 +10330,13 @@ function redactSecrets(text2) {
|
|
|
10334
10330
|
// ../core/src/missions/mission-types.ts
|
|
10335
10331
|
var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
|
|
10336
10332
|
|
|
10333
|
+
// ../core/src/types.ts
|
|
10334
|
+
var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
|
|
10335
|
+
["builtin:coding-ideas", "builtin:coding-ideas-v2"]
|
|
10336
|
+
]);
|
|
10337
|
+
|
|
10337
10338
|
// ../core/src/workflows/trait-types.ts
|
|
10338
|
-
var RESTRICTED_TRAIT_FLAGS = ["complete"
|
|
10339
|
+
var RESTRICTED_TRAIT_FLAGS = ["complete"];
|
|
10339
10340
|
function traitHookKey(traitId, hookKind) {
|
|
10340
10341
|
return `${traitId}::${hookKind}`;
|
|
10341
10342
|
}
|
|
@@ -10535,15 +10536,6 @@ var TraitRegistry = class {
|
|
|
10535
10536
|
message: `Column '${column.id}' is both a completion column and an intake column`
|
|
10536
10537
|
});
|
|
10537
10538
|
}
|
|
10538
|
-
if (flags.archived && flags.countsTowardWip) {
|
|
10539
|
-
violations.push({
|
|
10540
|
-
code: "archived-with-wip",
|
|
10541
|
-
severity: "error",
|
|
10542
|
-
columnId: column.id,
|
|
10543
|
-
traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
|
|
10544
|
-
message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
|
|
10545
|
-
});
|
|
10546
|
-
}
|
|
10547
10539
|
if (flags.intake) intakeColumnCount += 1;
|
|
10548
10540
|
}
|
|
10549
10541
|
if (intakeColumnCount > 1) {
|
|
@@ -10726,13 +10718,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
|
|
|
10726
10718
|
builtin: true,
|
|
10727
10719
|
flags: { complete: true }
|
|
10728
10720
|
},
|
|
10729
|
-
{
|
|
10730
|
-
id: "archived",
|
|
10731
|
-
name: "Archived",
|
|
10732
|
-
description: "Hidden from board; global semantics. Restricted flag.",
|
|
10733
|
-
builtin: true,
|
|
10734
|
-
flags: { archived: true, hiddenFromBoard: true }
|
|
10735
|
-
},
|
|
10736
10721
|
{
|
|
10737
10722
|
id: "merge-blocker",
|
|
10738
10723
|
name: "Merge blocker",
|
|
@@ -11026,8 +11011,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
|
|
|
11026
11011
|
"todo",
|
|
11027
11012
|
"in-progress",
|
|
11028
11013
|
"in-review",
|
|
11029
|
-
"done"
|
|
11030
|
-
"archived"
|
|
11014
|
+
"done"
|
|
11031
11015
|
];
|
|
11032
11016
|
function defaultColumnForNode(node) {
|
|
11033
11017
|
const seam = node.config?.seam;
|
|
@@ -13177,7 +13161,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
|
|
|
13177
13161
|
- Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
|
|
13178
13162
|
|
|
13179
13163
|
## Duplicate check
|
|
13180
|
-
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13164
|
+
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
|
|
13181
13165
|
|
|
13182
13166
|
## Required PROMPT.md shape
|
|
13183
13167
|
Write PROMPT.md with Original Description, What This Delivers, Before \u2192 After Transformation, Mission, Dependencies, Context to Read First, File Scope, Steps, Documentation Requirements, Completion Criteria, Git Commit Convention, and Do NOT. Put \`## Original Description\` immediately after the title/\`Created\`/\`Size\` metadata with the operator's original task description copied **verbatim** (do not paraphrase). Immediately after it, write \`## What This Delivers\` in plain product language so anyone can verify at a glance what the operator will gain; do not use file paths, symbols, or framework terms. Put \`## Before \u2192 After Transformation\` next, before \`## Mission\`, with concise Before/After bullets: current state, target state, why it satisfies the user's request at a glance. In \`## Steps\`, every executable heading MUST use \`### Step N: <name>\` (e.g. \`### Step 0: Preflight\`), numbered 0-based from \`### Step 0:\` through \`### Step N-1:\` with no gaps. Do not write bare \`### Preflight\` / \`### Implementation\` headings, and do not add review-level, triage subtask, or proactive subtask headings.
|
|
@@ -13462,8 +13446,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
|
|
|
13462
13446
|
- New Postgres migrations must be **registered explicitly** in \`packages/core/src/postgres/schema-applier.ts\` (version constant + bookkeeping check); a \`.sql\` file dropped in the migrations dir that is not wired there silently never runs.
|
|
13463
13447
|
|
|
13464
13448
|
## Duplicate check
|
|
13465
|
-
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13466
|
-
Do not search completed
|
|
13449
|
+
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
|
|
13450
|
+
Do not search completed work for duplicate candidates.
|
|
13467
13451
|
If an actionable task already covers the same work (even if worded differently), do not write a spec.
|
|
13468
13452
|
Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
|
|
13469
13453
|
\`DUPLICATE: {existing-task-id}\`
|
|
@@ -14619,8 +14603,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14619
14603
|
name: "In review",
|
|
14620
14604
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14621
14605
|
},
|
|
14622
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14623
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14606
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14624
14607
|
],
|
|
14625
14608
|
nodes: [
|
|
14626
14609
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -14825,8 +14808,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14825
14808
|
name: "In review",
|
|
14826
14809
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14827
14810
|
},
|
|
14828
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14829
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14811
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14830
14812
|
],
|
|
14831
14813
|
// KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
|
|
14832
14814
|
// parses into task steps.
|
|
@@ -15177,8 +15159,7 @@ var CODING_IDEAS_COLUMNS = [
|
|
|
15177
15159
|
name: "In review",
|
|
15178
15160
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15179
15161
|
},
|
|
15180
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15181
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15162
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15182
15163
|
];
|
|
15183
15164
|
var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
15184
15165
|
const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
|
|
@@ -15453,8 +15434,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
|
|
|
15453
15434
|
{ trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
|
|
15454
15435
|
]
|
|
15455
15436
|
},
|
|
15456
|
-
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15457
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15437
|
+
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15458
15438
|
],
|
|
15459
15439
|
fields: [
|
|
15460
15440
|
{ id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
|
|
@@ -15584,8 +15564,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
|
|
|
15584
15564
|
name: "Editorial review",
|
|
15585
15565
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15586
15566
|
},
|
|
15587
|
-
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15588
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15567
|
+
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15589
15568
|
],
|
|
15590
15569
|
nodes: [
|
|
15591
15570
|
{ id: "start", kind: "start", column: "ideation" },
|
|
@@ -15688,8 +15667,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
|
|
|
15688
15667
|
// move (no PR knowledge in the substrate).
|
|
15689
15668
|
traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
|
|
15690
15669
|
},
|
|
15691
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15692
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15670
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15693
15671
|
],
|
|
15694
15672
|
nodes: [
|
|
15695
15673
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -15792,6 +15770,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
|
|
|
15792
15770
|
function isBuiltinWorkflowId(id) {
|
|
15793
15771
|
return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
|
|
15794
15772
|
}
|
|
15773
|
+
function resolveRetiredBuiltinWorkflowId(id) {
|
|
15774
|
+
return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
|
|
15775
|
+
}
|
|
15795
15776
|
function ceCodeReviewOptionalGroupNode(column) {
|
|
15796
15777
|
return {
|
|
15797
15778
|
id: "code-review",
|
|
@@ -16054,7 +16035,7 @@ function withPostMergeVerificationNode(nodes2) {
|
|
|
16054
16035
|
var BUILTIN_WORKFLOWS = [
|
|
16055
16036
|
{
|
|
16056
16037
|
id: "builtin:coding",
|
|
16057
|
-
name: "Coding",
|
|
16038
|
+
name: "Coding (Auto)",
|
|
16058
16039
|
description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
|
|
16059
16040
|
kind: "workflow",
|
|
16060
16041
|
ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
|
|
@@ -16086,44 +16067,6 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16086
16067
|
createdAt: BUILTIN_TS,
|
|
16087
16068
|
updatedAt: BUILTIN_TS
|
|
16088
16069
|
},
|
|
16089
|
-
/*
|
|
16090
|
-
* FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
|
|
16091
|
-
* The Coding (Ideas) variant adds a manual "Ideas" intake in front of the default stepwise pipeline. New cards land in "ideas" (autoTriage off) and are not planned until an operator promotes them into the merged "todo" planner column; from there the graph is identical to the default Coding workflow.
|
|
16092
|
-
*/
|
|
16093
|
-
{
|
|
16094
|
-
id: "builtin:coding-ideas",
|
|
16095
|
-
name: "Coding (Ideas)",
|
|
16096
|
-
description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
|
|
16097
|
-
kind: "workflow",
|
|
16098
|
-
ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
|
|
16099
|
-
layout: {
|
|
16100
|
-
start: { x: 60, y: 160 },
|
|
16101
|
-
plan: { x: 230, y: 160 },
|
|
16102
|
-
"plan-review": { x: 400, y: 160 },
|
|
16103
|
-
"plan-replan": { x: 400, y: 320 },
|
|
16104
|
-
"plan-review-no-op": { x: 570, y: 320 },
|
|
16105
|
-
parse: { x: 570, y: 160 },
|
|
16106
|
-
steps: { x: 740, y: 160 },
|
|
16107
|
-
/* U8: the pending-review park is an exit, not a stage — placed off the main line. */
|
|
16108
|
-
"review-pending-handoff": { x: 740, y: 320 },
|
|
16109
|
-
"browser-verification": { x: 910, y: 160 },
|
|
16110
|
-
"browser-verification-remediation": { x: 910, y: 320 },
|
|
16111
|
-
"code-review": { x: 1080, y: 160 },
|
|
16112
|
-
"code-review-remediation": { x: 1080, y: 320 },
|
|
16113
|
-
"completion-summary": { x: 1250, y: 160 },
|
|
16114
|
-
"merge-gate": { x: 1420, y: 160 },
|
|
16115
|
-
"branch-group-member-integration": { x: 1590, y: 80 },
|
|
16116
|
-
"branch-group-promotion": { x: 1760, y: 80 },
|
|
16117
|
-
"merge-attempt": { x: 1930, y: 160 },
|
|
16118
|
-
"merge-retry": { x: 2100, y: 80 },
|
|
16119
|
-
"recovery-router": { x: 2100, y: 240 },
|
|
16120
|
-
"merge-manual-hold": { x: 1590, y: 240 },
|
|
16121
|
-
"post-merge-verification": { x: 2270, y: 160 },
|
|
16122
|
-
end: { x: 2440, y: 160 }
|
|
16123
|
-
},
|
|
16124
|
-
createdAt: BUILTIN_TS,
|
|
16125
|
-
updatedAt: BUILTIN_TS
|
|
16126
|
-
},
|
|
16127
16070
|
/*
|
|
16128
16071
|
* FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
|
|
16129
16072
|
* Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
|
|
@@ -16137,7 +16080,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16137
16080
|
*/
|
|
16138
16081
|
{
|
|
16139
16082
|
id: "builtin:coding-ideas-v2",
|
|
16140
|
-
name: "Coding (Ideas)
|
|
16083
|
+
name: "Coding (Ideas)",
|
|
16141
16084
|
description: "Capture-first coding pipeline with a read-only review lane: park ideas in a manual intake, plan, implement and test per step, then review, document, and merge.",
|
|
16142
16085
|
kind: "workflow",
|
|
16143
16086
|
ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
|
|
@@ -16533,7 +16476,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16533
16476
|
];
|
|
16534
16477
|
var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
|
|
16535
16478
|
function getBuiltinWorkflow(id) {
|
|
16536
|
-
return BUILTIN_BY_ID.get(id);
|
|
16479
|
+
return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
|
|
16537
16480
|
}
|
|
16538
16481
|
var DEFAULT_WORKFLOW_ID = "builtin:coding";
|
|
16539
16482
|
function resolveDefaultWorkflowIr() {
|
|
@@ -16583,7 +16526,8 @@ function defaultCodingWorkflowIr() {
|
|
|
16583
16526
|
return resolveDefaultWorkflowIr();
|
|
16584
16527
|
}
|
|
16585
16528
|
var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
|
|
16586
|
-
async function resolveWorkflowIrById(store,
|
|
16529
|
+
async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
|
|
16530
|
+
const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
|
|
16587
16531
|
let projectId;
|
|
16588
16532
|
try {
|
|
16589
16533
|
projectId = store.getWorkflowSettingsProjectId?.();
|
|
@@ -16678,8 +16622,7 @@ var LIFECYCLE_ROLE_FLAGS = {
|
|
|
16678
16622
|
hold: "hold",
|
|
16679
16623
|
wip: "countsTowardWip",
|
|
16680
16624
|
review: "mergeOrchestration",
|
|
16681
|
-
complete: "complete"
|
|
16682
|
-
archived: "archived"
|
|
16625
|
+
complete: "complete"
|
|
16683
16626
|
};
|
|
16684
16627
|
function resolveLifecycleColumns(ir) {
|
|
16685
16628
|
const columns = columnsOf(ir);
|
|
@@ -16692,13 +16635,12 @@ function resolveLifecycleColumns(ir) {
|
|
|
16692
16635
|
hold: first(LIFECYCLE_ROLE_FLAGS.hold),
|
|
16693
16636
|
wip: first(LIFECYCLE_ROLE_FLAGS.wip),
|
|
16694
16637
|
review: first(LIFECYCLE_ROLE_FLAGS.review),
|
|
16695
|
-
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16696
|
-
archived: first(LIFECYCLE_ROLE_FLAGS.archived)
|
|
16638
|
+
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16697
16639
|
};
|
|
16698
16640
|
}
|
|
16699
|
-
async function resolveTaskLifecycleColumns(store, taskId, cache) {
|
|
16641
|
+
async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
|
|
16700
16642
|
try {
|
|
16701
|
-
const ir = await resolveWorkflowIrForTask(store, taskId, cache);
|
|
16643
|
+
const ir = await resolveWorkflowIrForTask(store, taskId, cache, selectionCache);
|
|
16702
16644
|
return resolveLifecycleColumns(ir);
|
|
16703
16645
|
} catch {
|
|
16704
16646
|
return void 0;
|
|
@@ -16712,7 +16654,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
|
|
|
16712
16654
|
executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
|
|
16713
16655
|
reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16714
16656
|
merger: ["tasks:merge", "agents:view", "messages:read"],
|
|
16715
|
-
scheduler: ["tasks:assign", "tasks:create", "
|
|
16657
|
+
scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
|
|
16716
16658
|
engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16717
16659
|
custom: []
|
|
16718
16660
|
};
|
|
@@ -18621,7 +18563,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18621
18563
|
*
|
|
18622
18564
|
* Guards:
|
|
18623
18565
|
* - task must exist and not be paused
|
|
18624
|
-
* - task must not be in
|
|
18566
|
+
* - task must not be in its workflow's Complete column
|
|
18625
18567
|
* - task must not already be assigned to another agent
|
|
18626
18568
|
* - task checkout must be unheld or already held by this agent
|
|
18627
18569
|
*
|
|
@@ -18658,7 +18600,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18658
18600
|
return { ok: false, reason: bindVerdict.reason, task };
|
|
18659
18601
|
}
|
|
18660
18602
|
const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
|
|
18661
|
-
if (task.column === (claimLifecycle?.complete ?? "done")
|
|
18603
|
+
if (task.column === (claimLifecycle?.complete ?? "done")) {
|
|
18662
18604
|
return { ok: false, reason: "terminal", task };
|
|
18663
18605
|
}
|
|
18664
18606
|
if (task.assignedAgentId && task.assignedAgentId !== agentId) {
|
|
@@ -9286,6 +9286,11 @@ var DEFAULT_GLOBAL_SETTINGS = {
|
|
|
9286
9286
|
*/
|
|
9287
9287
|
quickAddSubmitOnEnter: true,
|
|
9288
9288
|
/*
|
|
9289
|
+
FNXC:ChatComposer 2026-09-06-01:54:
|
|
9290
|
+
Le comportement automatique des trois composeurs insère une nouvelle ligne pour un pointeur tactile primaire et conserve l’envoi par Entrée avec une souris, y compris dans une fenêtre étroite. Cette préférence d’opérateur reste globale et ne s’applique qu’à Entrée sans Cmd/Ctrl ni Shift, après l’autocomplétion, Shift et la garde IME propre au Chat de tâche.
|
|
9291
|
+
*/
|
|
9292
|
+
chatSubmitOnEnter: "auto",
|
|
9293
|
+
/*
|
|
9289
9294
|
FNXC:ChatSnippets 2026-09-03-15:56:
|
|
9290
9295
|
Keep the optional global key present but undefined so scope-key derivation remains complete without sharing a mutable default array. readChatSnippets supplies a fresh effective empty list.
|
|
9291
9296
|
*/
|
|
@@ -9877,15 +9882,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9877
9882
|
// maxPostReviewFixes MOVED to workflow settings (U4).
|
|
9878
9883
|
// Run maintenance (including WAL checkpointing) every 5 minutes by default.
|
|
9879
9884
|
maintenanceIntervalMs: 3e5,
|
|
9880
|
-
autoArchiveDoneTasksEnabled: true,
|
|
9881
|
-
autoArchiveDoneAfterMs: 48 * 60 * 60 * 1e3,
|
|
9882
|
-
doneAutoArchiveDays: 0,
|
|
9883
|
-
// FNXC:DuplicateIntake 2026-07-07-00:00 (FN-7658): default OFF — operators
|
|
9884
|
-
// decide via the near-duplicate flag/UI instead of tasks silently vanishing
|
|
9885
|
-
// into `archived` during intake. Set true to restore the pre-FN-7658 behavior.
|
|
9886
|
-
autoArchiveDuplicateTasksEnabled: false,
|
|
9887
9885
|
triageDuplicateResolution: "prompt",
|
|
9888
|
-
archiveAgentLogMode: "compact",
|
|
9889
9886
|
autoUpdatePrStatus: false,
|
|
9890
9887
|
githubCommentOnDone: false,
|
|
9891
9888
|
githubCommentTemplate: void 0,
|
|
@@ -9980,6 +9977,7 @@ var DEFAULT_PROJECT_SETTINGS = {
|
|
|
9980
9977
|
prTitlePromptInstructions: void 0,
|
|
9981
9978
|
prDescriptionPromptInstructions: void 0,
|
|
9982
9979
|
scripts: void 0,
|
|
9980
|
+
scriptMetadata: void 0,
|
|
9983
9981
|
setupScript: void 0,
|
|
9984
9982
|
insightExtractionEnabled: false,
|
|
9985
9983
|
insightExtractionSchedule: "0 2 * * *",
|
|
@@ -10205,8 +10203,6 @@ var AGENT_PERMISSIONS = [
|
|
|
10205
10203
|
// Merge completed task branches
|
|
10206
10204
|
"tasks:delete",
|
|
10207
10205
|
// Delete tasks
|
|
10208
|
-
"tasks:archive",
|
|
10209
|
-
// Archive/unarchive tasks
|
|
10210
10206
|
"agents:create",
|
|
10211
10207
|
// Create new agents
|
|
10212
10208
|
"agents:update",
|
|
@@ -10446,8 +10442,13 @@ function completionSummaryNode(column) {
|
|
|
10446
10442
|
// ../core/src/missions/mission-types.ts
|
|
10447
10443
|
var VALIDATION_INFLIGHT_STALE_MAX_AGE_MS = 6 * 60 * 60 * 1e3;
|
|
10448
10444
|
|
|
10445
|
+
// ../core/src/types.ts
|
|
10446
|
+
var RETIRED_BUILTIN_WORKFLOW_SUCCESSORS = /* @__PURE__ */ new Map([
|
|
10447
|
+
["builtin:coding-ideas", "builtin:coding-ideas-v2"]
|
|
10448
|
+
]);
|
|
10449
|
+
|
|
10449
10450
|
// ../core/src/workflows/trait-types.ts
|
|
10450
|
-
var RESTRICTED_TRAIT_FLAGS = ["complete"
|
|
10451
|
+
var RESTRICTED_TRAIT_FLAGS = ["complete"];
|
|
10451
10452
|
function traitHookKey(traitId, hookKind) {
|
|
10452
10453
|
return `${traitId}::${hookKind}`;
|
|
10453
10454
|
}
|
|
@@ -10647,15 +10648,6 @@ var TraitRegistry = class {
|
|
|
10647
10648
|
message: `Column '${column.id}' is both a completion column and an intake column`
|
|
10648
10649
|
});
|
|
10649
10650
|
}
|
|
10650
|
-
if (flags.archived && flags.countsTowardWip) {
|
|
10651
|
-
violations.push({
|
|
10652
|
-
code: "archived-with-wip",
|
|
10653
|
-
severity: "error",
|
|
10654
|
-
columnId: column.id,
|
|
10655
|
-
traitIds: this.traitIdsWithFlags(knownDefs, ["archived", "countsTowardWip"]),
|
|
10656
|
-
message: `Column '${column.id}' is archived but counts toward WIP \u2014 archived cards must not hold capacity`
|
|
10657
|
-
});
|
|
10658
|
-
}
|
|
10659
10651
|
if (flags.intake) intakeColumnCount += 1;
|
|
10660
10652
|
}
|
|
10661
10653
|
if (intakeColumnCount > 1) {
|
|
@@ -10838,13 +10830,6 @@ var BUILTIN_TRAIT_DEFINITIONS = [
|
|
|
10838
10830
|
builtin: true,
|
|
10839
10831
|
flags: { complete: true }
|
|
10840
10832
|
},
|
|
10841
|
-
{
|
|
10842
|
-
id: "archived",
|
|
10843
|
-
name: "Archived",
|
|
10844
|
-
description: "Hidden from board; global semantics. Restricted flag.",
|
|
10845
|
-
builtin: true,
|
|
10846
|
-
flags: { archived: true, hiddenFromBoard: true }
|
|
10847
|
-
},
|
|
10848
10833
|
{
|
|
10849
10834
|
id: "merge-blocker",
|
|
10850
10835
|
name: "Merge blocker",
|
|
@@ -11138,8 +11123,7 @@ var DEFAULT_WORKFLOW_COLUMN_IDS = [
|
|
|
11138
11123
|
"todo",
|
|
11139
11124
|
"in-progress",
|
|
11140
11125
|
"in-review",
|
|
11141
|
-
"done"
|
|
11142
|
-
"archived"
|
|
11126
|
+
"done"
|
|
11143
11127
|
];
|
|
11144
11128
|
function defaultColumnForNode(node) {
|
|
11145
11129
|
const seam = node.config?.seam;
|
|
@@ -13289,7 +13273,7 @@ Write a lean, executable PROMPT.md quickly. Preserve safety gates, but skip heav
|
|
|
13289
13273
|
- Preserve required safety sections for bugs, workflow routing, forensic tasks, and decision-only work.
|
|
13290
13274
|
|
|
13291
13275
|
## Duplicate check
|
|
13292
|
-
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13276
|
+
Before writing a spec, call \`fn_task_list\` for active work, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 targeted keyword phrases from the title/description, such as file paths, symptoms, and symbols. Do not search completed work for duplicate candidates. When an active match is a duplicate, do not write a spec \u2014 but still write PROMPT.md, with its entire contents being the single line \`DUPLICATE: {existing-task-id}\` and nothing else. That file is how the duplicate is recorded; announcing it only in your reply leaves no plan behind and re-plans the task in a loop.
|
|
13293
13277
|
|
|
13294
13278
|
## Required PROMPT.md shape
|
|
13295
13279
|
Write PROMPT.md with Original Description, What This Delivers, Before \u2192 After Transformation, Mission, Dependencies, Context to Read First, File Scope, Steps, Documentation Requirements, Completion Criteria, Git Commit Convention, and Do NOT. Put \`## Original Description\` immediately after the title/\`Created\`/\`Size\` metadata with the operator's original task description copied **verbatim** (do not paraphrase). Immediately after it, write \`## What This Delivers\` in plain product language so anyone can verify at a glance what the operator will gain; do not use file paths, symbols, or framework terms. Put \`## Before \u2192 After Transformation\` next, before \`## Mission\`, with concise Before/After bullets: current state, target state, why it satisfies the user's request at a glance. In \`## Steps\`, every executable heading MUST use \`### Step N: <name>\` (e.g. \`### Step 0: Preflight\`), numbered 0-based from \`### Step 0:\` through \`### Step N-1:\` with no gaps. Do not write bare \`### Preflight\` / \`### Implementation\` headings, and do not add review-level, triage subtask, or proactive subtask headings.
|
|
@@ -13574,8 +13558,8 @@ Verified facts about this codebase's storage \u2014 cite these correctly so Plan
|
|
|
13574
13558
|
- New Postgres migrations must be **registered explicitly** in \`packages/core/src/postgres/schema-applier.ts\` (version constant + bookkeeping check); a \`.sql\` file dropped in the migrations dir that is not wired there silently never runs.
|
|
13575
13559
|
|
|
13576
13560
|
## Duplicate check
|
|
13577
|
-
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\`
|
|
13578
|
-
Do not search completed
|
|
13561
|
+
Before writing a spec, first call \`fn_task_list\` to see active tasks, then call \`fn_task_search\` with \`includeDone: false\` for 2-4 distinct keyword phrases from the task title and description (for example file paths, error symptoms, and symbol names).
|
|
13562
|
+
Do not search completed work for duplicate candidates.
|
|
13579
13563
|
If an actionable task already covers the same work (even if worded differently), do not write a spec.
|
|
13580
13564
|
Instead you MUST still write PROMPT.md, with its ENTIRE contents being this one line and nothing else:
|
|
13581
13565
|
\`DUPLICATE: {existing-task-id}\`
|
|
@@ -14731,8 +14715,7 @@ var RAW_BUILTIN_CODING_WORKFLOW_IR = {
|
|
|
14731
14715
|
name: "In review",
|
|
14732
14716
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14733
14717
|
},
|
|
14734
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14735
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14718
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14736
14719
|
],
|
|
14737
14720
|
nodes: [
|
|
14738
14721
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -14937,8 +14920,7 @@ var RAW_BUILTIN_STEPWISE_CODING_WORKFLOW_IR = {
|
|
|
14937
14920
|
name: "In review",
|
|
14938
14921
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
14939
14922
|
},
|
|
14940
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14941
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
14923
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
14942
14924
|
],
|
|
14943
14925
|
// KTD-12: PROMPT.md is the planning-produced step-source artifact this workflow
|
|
14944
14926
|
// parses into task steps.
|
|
@@ -15289,8 +15271,7 @@ var CODING_IDEAS_COLUMNS = [
|
|
|
15289
15271
|
name: "In review",
|
|
15290
15272
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15291
15273
|
},
|
|
15292
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15293
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15274
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15294
15275
|
];
|
|
15295
15276
|
var RAW_BUILTIN_CODING_IDEAS_WORKFLOW_IR = (() => {
|
|
15296
15277
|
const ir = JSON.parse(JSON.stringify(BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR));
|
|
@@ -15565,8 +15546,7 @@ var RAW_BUILTIN_LEAD_GENERATION_WORKFLOW_IR = {
|
|
|
15565
15546
|
{ trait: "stall-detection", config: { timeoutMs: 864e5, action: "notify" } }
|
|
15566
15547
|
]
|
|
15567
15548
|
},
|
|
15568
|
-
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15569
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15549
|
+
{ id: "converted", name: "Converted", traits: [{ trait: "complete" }] }
|
|
15570
15550
|
],
|
|
15571
15551
|
fields: [
|
|
15572
15552
|
{ id: "company", name: "Company", type: "string", render: { placement: "card", widget: "input" } },
|
|
@@ -15696,8 +15676,7 @@ var RAW_BUILTIN_MARKETING_WORKFLOW_IR = {
|
|
|
15696
15676
|
name: "Editorial review",
|
|
15697
15677
|
traits: [{ trait: "merge-blocker" }, { trait: "human-review" }, { trait: "stall-detection" }, { trait: "merge" }]
|
|
15698
15678
|
},
|
|
15699
|
-
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15700
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15679
|
+
{ id: "published", name: "Published", traits: [{ trait: "complete" }] }
|
|
15701
15680
|
],
|
|
15702
15681
|
nodes: [
|
|
15703
15682
|
{ id: "start", kind: "start", column: "ideation" },
|
|
@@ -15800,8 +15779,7 @@ var RAW_BUILTIN_PR_WORKFLOW_IR = {
|
|
|
15800
15779
|
// move (no PR knowledge in the substrate).
|
|
15801
15780
|
traits: [{ trait: "merge-blocker" }, { trait: "stall-detection" }]
|
|
15802
15781
|
},
|
|
15803
|
-
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15804
|
-
{ id: "archived", name: "Archived", traits: [{ trait: "archived" }] }
|
|
15782
|
+
{ id: "done", name: "Done", traits: [{ trait: "complete" }] }
|
|
15805
15783
|
],
|
|
15806
15784
|
nodes: [
|
|
15807
15785
|
{ id: "start", kind: "start", column: "triage" },
|
|
@@ -15904,6 +15882,9 @@ var BUILTIN_WORKFLOW_ID_PREFIX = "builtin:";
|
|
|
15904
15882
|
function isBuiltinWorkflowId(id) {
|
|
15905
15883
|
return id.startsWith(BUILTIN_WORKFLOW_ID_PREFIX);
|
|
15906
15884
|
}
|
|
15885
|
+
function resolveRetiredBuiltinWorkflowId(id) {
|
|
15886
|
+
return RETIRED_BUILTIN_WORKFLOW_SUCCESSORS.get(id) ?? id;
|
|
15887
|
+
}
|
|
15907
15888
|
function ceCodeReviewOptionalGroupNode(column) {
|
|
15908
15889
|
return {
|
|
15909
15890
|
id: "code-review",
|
|
@@ -16166,7 +16147,7 @@ function withPostMergeVerificationNode(nodes2) {
|
|
|
16166
16147
|
var BUILTIN_WORKFLOWS = [
|
|
16167
16148
|
{
|
|
16168
16149
|
id: "builtin:coding",
|
|
16169
|
-
name: "Coding",
|
|
16150
|
+
name: "Coding (Auto)",
|
|
16170
16151
|
description: "Default coding pipeline: plan steps, execute them one at a time, then run the optional final code review and merge.",
|
|
16171
16152
|
kind: "workflow",
|
|
16172
16153
|
ir: BUILTIN_STEPWISE_FINAL_REVIEW_CODING_WORKFLOW_IR,
|
|
@@ -16198,44 +16179,6 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16198
16179
|
createdAt: BUILTIN_TS,
|
|
16199
16180
|
updatedAt: BUILTIN_TS
|
|
16200
16181
|
},
|
|
16201
|
-
/*
|
|
16202
|
-
* FNXC:CodingIdeasWorkflow 2026-07-04-09:40:
|
|
16203
|
-
* The Coding (Ideas) variant adds a manual "Ideas" intake in front of the default stepwise pipeline. New cards land in "ideas" (autoTriage off) and are not planned until an operator promotes them into the merged "todo" planner column; from there the graph is identical to the default Coding workflow.
|
|
16204
|
-
*/
|
|
16205
|
-
{
|
|
16206
|
-
id: "builtin:coding-ideas",
|
|
16207
|
-
name: "Coding (Ideas)",
|
|
16208
|
-
description: "Capture-first coding pipeline: park ideas in a manual intake, then plan, execute per step, run the optional final code review, and merge.",
|
|
16209
|
-
kind: "workflow",
|
|
16210
|
-
ir: BUILTIN_CODING_IDEAS_WORKFLOW_IR,
|
|
16211
|
-
layout: {
|
|
16212
|
-
start: { x: 60, y: 160 },
|
|
16213
|
-
plan: { x: 230, y: 160 },
|
|
16214
|
-
"plan-review": { x: 400, y: 160 },
|
|
16215
|
-
"plan-replan": { x: 400, y: 320 },
|
|
16216
|
-
"plan-review-no-op": { x: 570, y: 320 },
|
|
16217
|
-
parse: { x: 570, y: 160 },
|
|
16218
|
-
steps: { x: 740, y: 160 },
|
|
16219
|
-
/* U8: the pending-review park is an exit, not a stage — placed off the main line. */
|
|
16220
|
-
"review-pending-handoff": { x: 740, y: 320 },
|
|
16221
|
-
"browser-verification": { x: 910, y: 160 },
|
|
16222
|
-
"browser-verification-remediation": { x: 910, y: 320 },
|
|
16223
|
-
"code-review": { x: 1080, y: 160 },
|
|
16224
|
-
"code-review-remediation": { x: 1080, y: 320 },
|
|
16225
|
-
"completion-summary": { x: 1250, y: 160 },
|
|
16226
|
-
"merge-gate": { x: 1420, y: 160 },
|
|
16227
|
-
"branch-group-member-integration": { x: 1590, y: 80 },
|
|
16228
|
-
"branch-group-promotion": { x: 1760, y: 80 },
|
|
16229
|
-
"merge-attempt": { x: 1930, y: 160 },
|
|
16230
|
-
"merge-retry": { x: 2100, y: 80 },
|
|
16231
|
-
"recovery-router": { x: 2100, y: 240 },
|
|
16232
|
-
"merge-manual-hold": { x: 1590, y: 240 },
|
|
16233
|
-
"post-merge-verification": { x: 2270, y: 160 },
|
|
16234
|
-
end: { x: 2440, y: 160 }
|
|
16235
|
-
},
|
|
16236
|
-
createdAt: BUILTIN_TS,
|
|
16237
|
-
updatedAt: BUILTIN_TS
|
|
16238
|
-
},
|
|
16239
16182
|
/*
|
|
16240
16183
|
* FNXC:CodingIdeasV2Workflow 2026-08-26-05:56:
|
|
16241
16184
|
* Same Ideas board as builtin:coding-ideas, with one rule: in-review NEVER writes code.
|
|
@@ -16249,7 +16192,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16249
16192
|
*/
|
|
16250
16193
|
{
|
|
16251
16194
|
id: "builtin:coding-ideas-v2",
|
|
16252
|
-
name: "Coding (Ideas)
|
|
16195
|
+
name: "Coding (Ideas)",
|
|
16253
16196
|
description: "Capture-first coding pipeline with a read-only review lane: park ideas in a manual intake, plan, implement and test per step, then review, document, and merge.",
|
|
16254
16197
|
kind: "workflow",
|
|
16255
16198
|
ir: BUILTIN_CODING_IDEAS_V2_WORKFLOW_IR,
|
|
@@ -16645,7 +16588,7 @@ var BUILTIN_WORKFLOWS = [
|
|
|
16645
16588
|
];
|
|
16646
16589
|
var BUILTIN_BY_ID = new Map(BUILTIN_WORKFLOWS.map((wf) => [wf.id, wf]));
|
|
16647
16590
|
function getBuiltinWorkflow(id) {
|
|
16648
|
-
return BUILTIN_BY_ID.get(id);
|
|
16591
|
+
return BUILTIN_BY_ID.get(resolveRetiredBuiltinWorkflowId(id));
|
|
16649
16592
|
}
|
|
16650
16593
|
var DEFAULT_WORKFLOW_ID = "builtin:coding";
|
|
16651
16594
|
function resolveDefaultWorkflowIr() {
|
|
@@ -16695,7 +16638,8 @@ function defaultCodingWorkflowIr() {
|
|
|
16695
16638
|
return resolveDefaultWorkflowIr();
|
|
16696
16639
|
}
|
|
16697
16640
|
var inflightSelectionReads = /* @__PURE__ */ new WeakMap();
|
|
16698
|
-
async function resolveWorkflowIrById(store,
|
|
16641
|
+
async function resolveWorkflowIrById(store, requestedWorkflowId, irCache) {
|
|
16642
|
+
const workflowId = resolveRetiredBuiltinWorkflowId(requestedWorkflowId);
|
|
16699
16643
|
let projectId;
|
|
16700
16644
|
try {
|
|
16701
16645
|
projectId = store.getWorkflowSettingsProjectId?.();
|
|
@@ -16790,8 +16734,7 @@ var LIFECYCLE_ROLE_FLAGS = {
|
|
|
16790
16734
|
hold: "hold",
|
|
16791
16735
|
wip: "countsTowardWip",
|
|
16792
16736
|
review: "mergeOrchestration",
|
|
16793
|
-
complete: "complete"
|
|
16794
|
-
archived: "archived"
|
|
16737
|
+
complete: "complete"
|
|
16795
16738
|
};
|
|
16796
16739
|
function resolveLifecycleColumns(ir) {
|
|
16797
16740
|
const columns = columnsOf(ir);
|
|
@@ -16804,13 +16747,12 @@ function resolveLifecycleColumns(ir) {
|
|
|
16804
16747
|
hold: first(LIFECYCLE_ROLE_FLAGS.hold),
|
|
16805
16748
|
wip: first(LIFECYCLE_ROLE_FLAGS.wip),
|
|
16806
16749
|
review: first(LIFECYCLE_ROLE_FLAGS.review),
|
|
16807
|
-
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16808
|
-
archived: first(LIFECYCLE_ROLE_FLAGS.archived)
|
|
16750
|
+
complete: first(LIFECYCLE_ROLE_FLAGS.complete)
|
|
16809
16751
|
};
|
|
16810
16752
|
}
|
|
16811
|
-
async function resolveTaskLifecycleColumns(store, taskId, cache) {
|
|
16753
|
+
async function resolveTaskLifecycleColumns(store, taskId, cache, selectionCache) {
|
|
16812
16754
|
try {
|
|
16813
|
-
const ir = await resolveWorkflowIrForTask(store, taskId, cache);
|
|
16755
|
+
const ir = await resolveWorkflowIrForTask(store, taskId, cache, selectionCache);
|
|
16814
16756
|
return resolveLifecycleColumns(ir);
|
|
16815
16757
|
} catch {
|
|
16816
16758
|
return void 0;
|
|
@@ -16824,7 +16766,7 @@ var ROLE_DEFAULT_PERMISSIONS = {
|
|
|
16824
16766
|
executor: ["tasks:execute", "agents:view", "messages:read", "messages:send"],
|
|
16825
16767
|
reviewer: ["tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16826
16768
|
merger: ["tasks:merge", "agents:view", "messages:read"],
|
|
16827
|
-
scheduler: ["tasks:assign", "tasks:create", "
|
|
16769
|
+
scheduler: ["tasks:assign", "tasks:create", "agents:view", "automations:manage", "missions:manage", "messages:read"],
|
|
16828
16770
|
engineer: ["tasks:execute", "tasks:review", "agents:view", "messages:read", "messages:send"],
|
|
16829
16771
|
custom: []
|
|
16830
16772
|
};
|
|
@@ -18733,7 +18675,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18733
18675
|
*
|
|
18734
18676
|
* Guards:
|
|
18735
18677
|
* - task must exist and not be paused
|
|
18736
|
-
* - task must not be in
|
|
18678
|
+
* - task must not be in its workflow's Complete column
|
|
18737
18679
|
* - task must not already be assigned to another agent
|
|
18738
18680
|
* - task checkout must be unheld or already held by this agent
|
|
18739
18681
|
*
|
|
@@ -18770,7 +18712,7 @@ var AgentStore = class _AgentStore extends EventEmitter {
|
|
|
18770
18712
|
return { ok: false, reason: bindVerdict.reason, task };
|
|
18771
18713
|
}
|
|
18772
18714
|
const claimLifecycle = await resolveTaskLifecycleColumns(this.taskStore, taskId);
|
|
18773
|
-
if (task.column === (claimLifecycle?.complete ?? "done")
|
|
18715
|
+
if (task.column === (claimLifecycle?.complete ?? "done")) {
|
|
18774
18716
|
return { ok: false, reason: "terminal", task };
|
|
18775
18717
|
}
|
|
18776
18718
|
if (task.assignedAgentId && task.assignedAgentId !== agentId) {
|