@flowdesk/opencode-plugin 0.1.13 → 0.1.15
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/README.md +1 -1
- package/dist/agent-task-output.d.ts +29 -0
- package/dist/agent-task-output.d.ts.map +1 -0
- package/dist/agent-task-output.js +225 -0
- package/dist/agent-task-output.js.map +1 -0
- package/dist/agent-task-runner.d.ts +34 -0
- package/dist/agent-task-runner.d.ts.map +1 -1
- package/dist/agent-task-runner.js +634 -84
- package/dist/agent-task-runner.js.map +1 -1
- package/dist/auto-continue-preview-tool.d.ts +36 -0
- package/dist/auto-continue-preview-tool.d.ts.map +1 -0
- package/dist/auto-continue-preview-tool.js +119 -0
- package/dist/auto-continue-preview-tool.js.map +1 -0
- package/dist/completion-ui-cache.d.ts +6 -0
- package/dist/completion-ui-cache.d.ts.map +1 -0
- package/dist/completion-ui-cache.js +390 -0
- package/dist/completion-ui-cache.js.map +1 -0
- package/dist/event-hook-observer.d.ts +14 -0
- package/dist/event-hook-observer.d.ts.map +1 -0
- package/dist/event-hook-observer.js +257 -0
- package/dist/event-hook-observer.js.map +1 -0
- package/dist/managed-dispatch-adapter.d.ts +62 -0
- package/dist/managed-dispatch-adapter.d.ts.map +1 -1
- package/dist/managed-dispatch-adapter.js +472 -4
- package/dist/managed-dispatch-adapter.js.map +1 -1
- package/dist/model-selection-engine.d.ts +60 -0
- package/dist/model-selection-engine.d.ts.map +1 -0
- package/dist/model-selection-engine.js +242 -0
- package/dist/model-selection-engine.js.map +1 -0
- package/dist/provider-usage-live-tool.d.ts +10 -0
- package/dist/provider-usage-live-tool.d.ts.map +1 -1
- package/dist/provider-usage-live-tool.js +262 -33
- package/dist/provider-usage-live-tool.js.map +1 -1
- package/dist/server.d.ts +36 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +497 -20
- package/dist/server.js.map +1 -1
- package/dist/stall-recovery.d.ts +34 -0
- package/dist/stall-recovery.d.ts.map +1 -1
- package/dist/stall-recovery.js +680 -3
- package/dist/stall-recovery.js.map +1 -1
- package/dist/status-live-tool.d.ts +54 -0
- package/dist/status-live-tool.d.ts.map +1 -1
- package/dist/status-live-tool.js +449 -44
- package/dist/status-live-tool.js.map +1 -1
- package/dist/tui-subtask-activity.d.ts +73 -0
- package/dist/tui-subtask-activity.d.ts.map +1 -0
- package/dist/tui-subtask-activity.js +271 -0
- package/dist/tui-subtask-activity.js.map +1 -0
- package/dist/tui-usage-snapshot.d.ts +14 -0
- package/dist/tui-usage-snapshot.d.ts.map +1 -1
- package/dist/tui-usage-snapshot.js +275 -8
- package/dist/tui-usage-snapshot.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +102 -44
- package/dist/tui.js.map +1 -1
- package/dist/workflow-assign-tool.d.ts +23 -0
- package/dist/workflow-assign-tool.d.ts.map +1 -0
- package/dist/workflow-assign-tool.js +135 -0
- package/dist/workflow-assign-tool.js.map +1 -0
- package/dist/workflow-author-tool.d.ts +29 -0
- package/dist/workflow-author-tool.d.ts.map +1 -0
- package/dist/workflow-author-tool.js +227 -0
- package/dist/workflow-author-tool.js.map +1 -0
- package/dist/workflow-dispatch-tool.d.ts +12 -0
- package/dist/workflow-dispatch-tool.d.ts.map +1 -1
- package/dist/workflow-dispatch-tool.js +31 -3
- package/dist/workflow-dispatch-tool.js.map +1 -1
- package/dist/workflow-orchestrator.d.ts +31 -0
- package/dist/workflow-orchestrator.d.ts.map +1 -0
- package/dist/workflow-orchestrator.js +160 -0
- package/dist/workflow-orchestrator.js.map +1 -0
- package/dist/workflow-scheduler.d.ts.map +1 -1
- package/dist/workflow-scheduler.js +3 -1
- package/dist/workflow-scheduler.js.map +1 -1
- package/dist/workflow-synthesis-tool.d.ts +31 -0
- package/dist/workflow-synthesis-tool.d.ts.map +1 -0
- package/dist/workflow-synthesis-tool.js +194 -0
- package/dist/workflow-synthesis-tool.js.map +1 -0
- package/package.json +2 -2
package/dist/tui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAY,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACN,0CAA0C,EAC1C,kCAAkC,GAElC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,0CAA0C,EAC1C,4CAA4C,EAC5C,kCAAkC,EAClC,oCAAoC,GAGpC,MAAM,2BAA2B,CAAC;AAWnC,MAAM,iCAAiC,GAAG,MAAM,CAAC;AACjD,MAAM,oCAAoC,GAAG,KAAK,CAAC;AAanD,SAAS,wBAAwB,CAAC,OAAmC;IACpE,MAAM,IAAI,GAAG,GAAmC,EAAE,CACjD,kCAAkC,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC,mBAAmB;QACpC,UAAU,EAAE,OAAO,CAAC,eAAe;KACnC,CAAC,CAAC;IAEJ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;IAE3E,OAAO;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;QAClB,OAAO,EAAE,GAAG,EAAE;YACb,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;KACD,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAmC;IACtE,MAAM,IAAI,GAAG,GAAqC,EAAE,CACnD,oCAAoC,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC,mBAAmB;QACpC,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,IAAI,OAAO,CAAC,iBAAiB;KACrF,CAAC,CAAC;IACJ,MAAM,YAAY,GAAG,GAAmC,EAAE,CACzD,kCAAkC,CAAC;QAClC,OAAO,EAAE,OAAO,CAAC,mBAAmB;QACpC,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,IAAI,OAAO,CAAC,iBAAiB;KACrF,CAAC,CAAC;IACJ,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChB,eAAe,CAAC,YAAY,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;IAE9E,OAAO;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;QAClB,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE;QAClC,OAAO,EAAE,GAAG,EAAE;YACb,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;KACD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,OAAO;QACN,GAAG,CAAC,OAAO,MAAM,CAAC,mBAAmB,KAAK,QAAQ;YACjD,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAAE;YACrD,CAAC,CAAC,EAAE,CAAC;QACN,GAAG,CAAC,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,GAAG,CAAC,OAAO,MAAM,CAAC,uBAAuB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1H,GAAG,CAAC,OAAO,MAAM,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,GAAG,CAAC,OAAO,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,OAAO,MAAM,CAAC,sBAAsB,KAAK,SAAS;YACrD,CAAC,CAAC,EAAE,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,EAAE;YAC3D,CAAC,CAAC,EAAE,CAAC;KACN,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAA8B;IAC/C,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpB,OAAO,IAA8B,CAAC;AACvC,CAAC;AAED,SAAS,GAAG,CAAC,QAAgC,EAAE,QAAiC,EAAE;IACjF,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5E,KAAK,MAAM,KAAK,IAAI,QAAQ;QAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,IAA8B,CAAC;AACvC,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,WAAW,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,YAAY,CAAC,UAA8B,EAAE,YAAkC;IACvF,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,0CAA0C,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnG,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACtH,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,0CAA0C,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAChH,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,4CAA4C,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzG,uEAAuE;IACvE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;QAChC,MAAM,KAAK,GAAgC,EAAE,CAAC;QAC9C,+BAA+B;QAC/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACzB,sCAAsC;QACtC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,oCAAoC;QACpC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,kGAAkG;IAClG,OAAO,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;QACtD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,CAAE,KAAK,CAAC,KAAK,CAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrI,CAAC,CAAC,CAAC,EACH,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAClD,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IACjF,OAAO,QAAQ,CAAC,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,GAAG,GAAc,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACjE,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpD,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEtD,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAClB,KAAK,EAAE;YACN,eAAe;gBACd,OAAO,YAAY,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;YAC/D,CAAC;YACD,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,IAAI;gBACjC,CAAC,CAAC;oBACA,UAAU;wBACT,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC;oBACvC,CAAC;iBACD;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,sBAAsB,KAAK,IAAI;gBAC1C,CAAC,CAAC;oBACA,oBAAoB;wBACnB,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC;oBACvC,CAAC;iBACD;gBACF,CAAC,CAAC,EAAE,CAAC;SACN;KACD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe;IACd,EAAE,EAAE,cAAc;IAClB,GAAG;CACwC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FlowDeskTuiUsageProviderRowV1 } from "./tui-usage-snapshot.js";
|
|
2
|
+
export interface FlowDeskWorkflowAssignToolResultV1 {
|
|
3
|
+
status: "assignments_written" | "blocked_before_assignments";
|
|
4
|
+
workflowId?: string;
|
|
5
|
+
assignmentCount?: number;
|
|
6
|
+
evidenceRefs?: string[];
|
|
7
|
+
redactedBlockReason?: string;
|
|
8
|
+
summaryForUser: string;
|
|
9
|
+
safeNextActions: readonly string[];
|
|
10
|
+
authority: {
|
|
11
|
+
realOpenCodeDispatch: false;
|
|
12
|
+
providerCall: false;
|
|
13
|
+
runtimeExecution: false;
|
|
14
|
+
actualLaneLaunch: false;
|
|
15
|
+
fallbackAuthority: false;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare function executeFlowDeskWorkflowAssignToolV1(input: {
|
|
19
|
+
workflowId: string;
|
|
20
|
+
rootDir: string;
|
|
21
|
+
sidebarCacheRows?: FlowDeskTuiUsageProviderRowV1[];
|
|
22
|
+
}): FlowDeskWorkflowAssignToolResultV1;
|
|
23
|
+
//# sourceMappingURL=workflow-assign-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-assign-tool.d.ts","sourceRoot":"","sources":["../src/workflow-assign-tool.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAG7E,MAAM,WAAW,kCAAkC;IAClD,MAAM,EAAE,qBAAqB,GAAG,4BAA4B,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,SAAS,EAAE;QACV,oBAAoB,EAAE,KAAK,CAAC;QAC5B,YAAY,EAAE,KAAK,CAAC;QACpB,gBAAgB,EAAE,KAAK,CAAC;QACxB,gBAAgB,EAAE,KAAK,CAAC;QACxB,iBAAiB,EAAE,KAAK,CAAC;KACzB,CAAC;CACF;AAeD,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,6BAA6B,EAAE,CAAC;CACnD,GAAG,kCAAkC,CAyHrC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { validateFlowDeskTaskAgentAssignmentV1, validateFlowDeskTaskModelSelectionV1, applyFlowDeskSessionEvidenceWriteIntentsV1, prepareFlowDeskSessionEvidenceWriteIntentV1, reloadFlowDeskSessionEvidenceV1, } from "@flowdesk/core";
|
|
5
|
+
import { selectModelForTask, buildUsageMapFromProviders } from "./model-selection-engine.js";
|
|
6
|
+
const SAFE_AUTHORITY = { realOpenCodeDispatch: false, providerCall: false, runtimeExecution: false, actualLaneLaunch: false, fallbackAuthority: false };
|
|
7
|
+
function blocked(reason, workflowId) {
|
|
8
|
+
return { status: "blocked_before_assignments", workflowId, redactedBlockReason: reason, summaryForUser: `Blocked: ${reason}`, safeNextActions: ["/flowdesk-status", "/flowdesk-doctor"], authority: SAFE_AUTHORITY };
|
|
9
|
+
}
|
|
10
|
+
function loadWorkingModelIds(rootDir) {
|
|
11
|
+
const snapshotPath = join(rootDir, "model-availability/working-models.json");
|
|
12
|
+
const raw = JSON.parse(readFileSync(snapshotPath, "utf8"));
|
|
13
|
+
const ids = raw.available_model_ids;
|
|
14
|
+
return Array.isArray(ids) ? ids.filter((value) => typeof value === "string" && value.includes("/")).filter((value, index, array) => array.indexOf(value) === index) : [];
|
|
15
|
+
}
|
|
16
|
+
export function executeFlowDeskWorkflowAssignToolV1(input) {
|
|
17
|
+
if (!input.workflowId?.trim())
|
|
18
|
+
return blocked("workflowId is required");
|
|
19
|
+
if (!input.rootDir?.trim())
|
|
20
|
+
return blocked("rootDir is required");
|
|
21
|
+
const reload = reloadFlowDeskSessionEvidenceV1({ workflowId: input.workflowId, rootDir: input.rootDir });
|
|
22
|
+
if (!reload.ok)
|
|
23
|
+
return blocked("session evidence reload failed", input.workflowId);
|
|
24
|
+
const graphEntry = reload.entries.find(e => e.evidenceClass === "task_graph");
|
|
25
|
+
if (!graphEntry)
|
|
26
|
+
return blocked("task_graph evidence not found – run author tool first", input.workflowId);
|
|
27
|
+
const graph = graphEntry.record;
|
|
28
|
+
const nodes = Array.isArray(graph.nodes) ? graph.nodes : [];
|
|
29
|
+
if (nodes.length === 0)
|
|
30
|
+
return blocked("task_graph has no nodes", input.workflowId);
|
|
31
|
+
const rows = input.sidebarCacheRows ?? [];
|
|
32
|
+
if (rows.length === 0)
|
|
33
|
+
return blocked("no provider usage data available – run flowdesk_provider_usage_live first", input.workflowId);
|
|
34
|
+
let workingModelIds;
|
|
35
|
+
try {
|
|
36
|
+
workingModelIds = loadWorkingModelIds(input.rootDir);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return blocked("working-model cache missing – run models refresh first", input.workflowId);
|
|
40
|
+
}
|
|
41
|
+
if (workingModelIds.length === 0)
|
|
42
|
+
return blocked("working-model cache empty – run models refresh first", input.workflowId);
|
|
43
|
+
const selectionNow = new Date();
|
|
44
|
+
const createdAt = selectionNow.toISOString();
|
|
45
|
+
const evidenceRefs = [];
|
|
46
|
+
const writeIntents = [];
|
|
47
|
+
for (const node of nodes) {
|
|
48
|
+
const taskId = typeof node.task_id === "string" ? node.task_id : "";
|
|
49
|
+
const agentRole = typeof node.agent_role === "string" ? node.agent_role : "implementation";
|
|
50
|
+
if (!taskId)
|
|
51
|
+
continue;
|
|
52
|
+
const usageMap = buildUsageMapFromProviders(rows, () => selectionNow);
|
|
53
|
+
const selected = selectModelForTask(agentRole, usageMap, { availableModelIds: workingModelIds }, () => selectionNow);
|
|
54
|
+
if (!selected)
|
|
55
|
+
return blocked(`no available provider for task ${taskId} (role: ${agentRole})`, input.workflowId);
|
|
56
|
+
const assignmentId = `assignment-${randomBytes(4).toString("hex")}`;
|
|
57
|
+
const selectionId = `selection-${randomBytes(4).toString("hex")}`;
|
|
58
|
+
const agentName = selected.candidate.agentName;
|
|
59
|
+
const modelId = selected.candidate.providerQualifiedModelId;
|
|
60
|
+
const selectedFamily = selected.candidate.providerFamily;
|
|
61
|
+
const selectedRemaining = rows.find(r => r.providerFamily === selectedFamily)?.remainingPercent ?? null;
|
|
62
|
+
const assignmentRecord = {
|
|
63
|
+
schema_version: "flowdesk.task_agent_assignment.v1",
|
|
64
|
+
workflow_id: input.workflowId,
|
|
65
|
+
task_id: taskId,
|
|
66
|
+
assignment_id: assignmentId,
|
|
67
|
+
agent_role: agentRole,
|
|
68
|
+
agent_role_ref: `agent-${agentName}`,
|
|
69
|
+
selected_agent_ref: agentName,
|
|
70
|
+
selected_profile_ref: `profile-${agentName}`,
|
|
71
|
+
compatibility_status: "compatible",
|
|
72
|
+
fit_label: selected.candidate.tier === "heavy" ? "strong_fit" : "acceptable_fit",
|
|
73
|
+
registry_evidence_ref: "registry-default",
|
|
74
|
+
profile_evidence_ref: "profile-default",
|
|
75
|
+
blocked_labels: [],
|
|
76
|
+
created_at: createdAt,
|
|
77
|
+
release_gate: "release1_planning_only",
|
|
78
|
+
dispatch_authority_enabled: false,
|
|
79
|
+
provider_call_made: false,
|
|
80
|
+
runtime_execution: false,
|
|
81
|
+
actual_lane_launch: false,
|
|
82
|
+
write_authority_enabled: false,
|
|
83
|
+
redaction_version: "v1",
|
|
84
|
+
};
|
|
85
|
+
const selectionRecord = {
|
|
86
|
+
schema_version: "flowdesk.task_model_selection.v1",
|
|
87
|
+
workflow_id: input.workflowId,
|
|
88
|
+
task_id: taskId,
|
|
89
|
+
selection_id: selectionId,
|
|
90
|
+
provider_family: selectedFamily,
|
|
91
|
+
provider_qualified_model_id: modelId,
|
|
92
|
+
usage_snapshot_ref: `usage-${selectedFamily}-recent`,
|
|
93
|
+
usage_snapshot_freshness: "fresh",
|
|
94
|
+
provider_health_ref: `health-${selectedFamily}-recent`,
|
|
95
|
+
provider_health_label: rows.find(r => r.providerFamily === selectedFamily)?.alertLevel === "ok" ? "ok" : "warning",
|
|
96
|
+
exact_model_availability_ref: `avail-${selectedFamily}-recent`,
|
|
97
|
+
exact_model_availability_label: "available",
|
|
98
|
+
fit_label: selected.candidate.tier === "heavy" ? "strong_fit" : "acceptable_fit",
|
|
99
|
+
performance_label: (selectedRemaining ?? 100) > 50 ? "headroom_ok" : "headroom_tight",
|
|
100
|
+
selection_status: "selected",
|
|
101
|
+
blocked_labels: [],
|
|
102
|
+
fallback_allowed: false,
|
|
103
|
+
reselection_allowed: false,
|
|
104
|
+
created_at: createdAt,
|
|
105
|
+
release_gate: "release1_planning_only",
|
|
106
|
+
dispatch_authority_enabled: false,
|
|
107
|
+
provider_call_made: false,
|
|
108
|
+
runtime_execution: false,
|
|
109
|
+
actual_lane_launch: false,
|
|
110
|
+
write_authority_enabled: false,
|
|
111
|
+
redaction_version: "v1",
|
|
112
|
+
};
|
|
113
|
+
if (!validateFlowDeskTaskAgentAssignmentV1(assignmentRecord).ok)
|
|
114
|
+
return blocked(`assignment validation failed for ${taskId}`, input.workflowId);
|
|
115
|
+
if (!validateFlowDeskTaskModelSelectionV1(selectionRecord).ok)
|
|
116
|
+
return blocked(`model selection validation failed for ${taskId}`, input.workflowId);
|
|
117
|
+
writeIntents.push(prepareFlowDeskSessionEvidenceWriteIntentV1({ workflowId: input.workflowId, evidenceId: assignmentId, record: assignmentRecord }), prepareFlowDeskSessionEvidenceWriteIntentV1({ workflowId: input.workflowId, evidenceId: selectionId, record: selectionRecord }));
|
|
118
|
+
evidenceRefs.push(assignmentId, selectionId);
|
|
119
|
+
}
|
|
120
|
+
if (writeIntents.some(i => !i.ok || !i.writeIntent))
|
|
121
|
+
return blocked("evidence write intent preparation failed", input.workflowId);
|
|
122
|
+
const applied = applyFlowDeskSessionEvidenceWriteIntentsV1(input.rootDir, writeIntents.map(i => i.writeIntent));
|
|
123
|
+
if (!applied.ok)
|
|
124
|
+
return blocked("evidence write failed", input.workflowId);
|
|
125
|
+
return {
|
|
126
|
+
status: "assignments_written",
|
|
127
|
+
workflowId: input.workflowId,
|
|
128
|
+
assignmentCount: nodes.length,
|
|
129
|
+
evidenceRefs,
|
|
130
|
+
summaryForUser: `FlowDesk assigned ${nodes.length} task(s) to agents/models using usage-weighted selection. Planning only: no dispatch authority opened.`,
|
|
131
|
+
safeNextActions: ["/flowdesk-status", "/flowdesk-export-debug"],
|
|
132
|
+
authority: SAFE_AUTHORITY,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=workflow-assign-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-assign-tool.js","sourceRoot":"","sources":["../src/workflow-assign-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type FlowDeskAgentTaskInputV1 } from "./agent-task-runner.js";
|
|
2
|
+
export interface FlowDeskWorkflowAuthorToolResultV1 {
|
|
3
|
+
status: "workflow_authoring_completed" | "workflow_authoring_incomplete" | "blocked_before_workflow_authoring";
|
|
4
|
+
workflowId?: string;
|
|
5
|
+
authoringResultId?: string;
|
|
6
|
+
taskGraphId?: string;
|
|
7
|
+
taskCount?: number;
|
|
8
|
+
redactedBlockReason?: string;
|
|
9
|
+
safeNextActions: readonly string[];
|
|
10
|
+
authority: {
|
|
11
|
+
realOpenCodeDispatch: false;
|
|
12
|
+
providerCall: false;
|
|
13
|
+
runtimeExecution: false;
|
|
14
|
+
actualLaneLaunch: false;
|
|
15
|
+
fallbackAuthority: false;
|
|
16
|
+
hardCancelOrNoReplyAuthority: false;
|
|
17
|
+
toolAuthority: false;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare function executeFlowDeskWorkflowAuthorToolV1(input: {
|
|
21
|
+
workflowId?: string;
|
|
22
|
+
goalSummary: string;
|
|
23
|
+
parentSessionId: string;
|
|
24
|
+
rootDir: string;
|
|
25
|
+
client: FlowDeskAgentTaskInputV1["client"];
|
|
26
|
+
providerQualifiedModelId: string;
|
|
27
|
+
agentName: string;
|
|
28
|
+
}): Promise<FlowDeskWorkflowAuthorToolResultV1>;
|
|
29
|
+
//# sourceMappingURL=workflow-author-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-author-tool.d.ts","sourceRoot":"","sources":["../src/workflow-author-tool.ts"],"names":[],"mappings":"AAQA,OAAO,EAA8B,KAAK,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAyGnG,MAAM,WAAW,kCAAkC;IAClD,MAAM,EAAE,8BAA8B,GAAG,+BAA+B,GAAG,mCAAmC,CAAC;IAC/G,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,SAAS,EAAE;QACV,oBAAoB,EAAE,KAAK,CAAC;QAC5B,YAAY,EAAE,KAAK,CAAC;QACpB,gBAAgB,EAAE,KAAK,CAAC;QACxB,gBAAgB,EAAE,KAAK,CAAC;QACxB,iBAAiB,EAAE,KAAK,CAAC;QACzB,4BAA4B,EAAE,KAAK,CAAC;QACpC,aAAa,EAAE,KAAK,CAAC;KACrB,CAAC;CACF;AAgBD,wBAAsB,mCAAmC,CAAC,KAAK,EAAE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,kCAAkC,CAAC,CA6G9C"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { validateFlowDeskWorkflowAuthoringResultV1, validateFlowDeskTaskGraphV1, applyFlowDeskSessionEvidenceWriteIntentsV1, prepareFlowDeskSessionEvidenceWriteIntentV1, reloadFlowDeskSessionEvidenceV1, } from "@flowdesk/core";
|
|
3
|
+
import { executeFlowDeskAgentTaskV1 } from "./agent-task-runner.js";
|
|
4
|
+
/** Normalize any string to a safe opaque-id: ASCII alphanumeric plus -._ only */
|
|
5
|
+
function toSafeId(raw, fallback) {
|
|
6
|
+
const cleaned = raw.replace(/[^A-Za-z0-9._-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
7
|
+
const safe = cleaned.length >= 3 ? cleaned : fallback;
|
|
8
|
+
return safe.slice(0, 64);
|
|
9
|
+
}
|
|
10
|
+
/** Redact any text that might trigger forbidden-payload validators */
|
|
11
|
+
function safeText(raw, max) {
|
|
12
|
+
return raw
|
|
13
|
+
.replace(/\b(prompt|system prompt|developer message|transcript|stack trace|provider payload|provider response|tool args|tool result|shell output|raw log|raw config)\b/gi, "[redacted]")
|
|
14
|
+
.replace(/([A-Za-z]:[\\/]|\\\\|\/(Users|home|etc|var|private|tmp|usr|opt)(?:\/|$))/g, "[redacted-path]")
|
|
15
|
+
.replace(/\b(sk-[A-Za-z0-9]|api[_-]?key|bearer\s+[A-Za-z0-9]|token[:=]|secret)\b/gi, "[redacted-cred]")
|
|
16
|
+
.slice(0, max);
|
|
17
|
+
}
|
|
18
|
+
function randomId(prefix) {
|
|
19
|
+
return `${prefix}-${randomBytes(5).toString("hex")}`;
|
|
20
|
+
}
|
|
21
|
+
function extractJsonBlock(text) {
|
|
22
|
+
const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
23
|
+
if (fenced?.[1]) {
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(fenced[1].trim());
|
|
26
|
+
}
|
|
27
|
+
catch { /* fall through */ }
|
|
28
|
+
}
|
|
29
|
+
const bare = text.match(/\{[\s\S]*\}/);
|
|
30
|
+
if (bare) {
|
|
31
|
+
try {
|
|
32
|
+
return JSON.parse(bare[0]);
|
|
33
|
+
}
|
|
34
|
+
catch { /* fall through */ }
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function parseTasks(raw) {
|
|
39
|
+
if (!raw)
|
|
40
|
+
return { ok: false, tasks: [], error: "no JSON found" };
|
|
41
|
+
// Support: array directly, { tasks: [...] }, { task_list: [...] }, { plan: { tasks: [...] } }
|
|
42
|
+
let arr = undefined;
|
|
43
|
+
if (Array.isArray(raw)) {
|
|
44
|
+
arr = raw;
|
|
45
|
+
}
|
|
46
|
+
else if (typeof raw === "object" && raw !== null) {
|
|
47
|
+
const r = raw;
|
|
48
|
+
arr = Array.isArray(r.tasks) ? r.tasks
|
|
49
|
+
: Array.isArray(r.task_list) ? r.task_list
|
|
50
|
+
: Array.isArray(r.plan_tasks) ? r.plan_tasks
|
|
51
|
+
: typeof r.plan === "object" && r.plan !== null && Array.isArray(r.plan.tasks)
|
|
52
|
+
? r.plan.tasks
|
|
53
|
+
: undefined;
|
|
54
|
+
}
|
|
55
|
+
if (!arr || !Array.isArray(arr))
|
|
56
|
+
return { ok: false, tasks: [], error: "missing tasks field" };
|
|
57
|
+
const taskArr = arr;
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
const rawIdMap = new Map(); // raw LLM id → normalized safe id
|
|
60
|
+
const tasks = [];
|
|
61
|
+
for (let idx = 0; idx < taskArr.length; idx++) {
|
|
62
|
+
const item = taskArr[idx];
|
|
63
|
+
if (!item || typeof item !== "object")
|
|
64
|
+
return { ok: false, tasks: [], error: "task must be an object" };
|
|
65
|
+
const t = item;
|
|
66
|
+
const rawId = typeof t.task_id === "string" ? t.task_id.trim() : "";
|
|
67
|
+
if (!rawId)
|
|
68
|
+
return { ok: false, tasks: [], error: "task_id required" };
|
|
69
|
+
// Normalize task_id to ASCII-safe format
|
|
70
|
+
const safeId = toSafeId(rawId, `task-${idx + 1}`);
|
|
71
|
+
// Ensure it starts with "task-" for clarity
|
|
72
|
+
const finalId = safeId.startsWith("task") ? safeId : `task-${safeId}`;
|
|
73
|
+
if (seen.has(finalId)) {
|
|
74
|
+
// deduplicate by appending index
|
|
75
|
+
const dedupId = `${finalId}-${idx}`;
|
|
76
|
+
rawIdMap.set(rawId, dedupId);
|
|
77
|
+
seen.add(dedupId);
|
|
78
|
+
tasks.push({
|
|
79
|
+
task_id: dedupId,
|
|
80
|
+
title: safeText(typeof t.title === "string" ? t.title : "Task", 120),
|
|
81
|
+
summary: safeText(typeof t.summary === "string" ? t.summary : "No summary.", 400),
|
|
82
|
+
agent_role: typeof t.agent_role === "string" ? t.agent_role : "implementation",
|
|
83
|
+
depends_on: [],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
rawIdMap.set(rawId, finalId);
|
|
88
|
+
seen.add(finalId);
|
|
89
|
+
tasks.push({
|
|
90
|
+
task_id: finalId,
|
|
91
|
+
title: safeText(typeof t.title === "string" ? t.title : "Task", 120),
|
|
92
|
+
summary: safeText(typeof t.summary === "string" ? t.summary : "No summary.", 400),
|
|
93
|
+
agent_role: typeof t.agent_role === "string" ? t.agent_role : "implementation",
|
|
94
|
+
depends_on: Array.isArray(t.depends_on) ? t.depends_on.filter((d) => typeof d === "string") : [],
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Resolve depends_on using the rawIdMap
|
|
99
|
+
for (const task of tasks) {
|
|
100
|
+
task.depends_on = task.depends_on
|
|
101
|
+
.map(rawDep => rawIdMap.get(rawDep) ?? rawDep)
|
|
102
|
+
.filter(dep => seen.has(dep) && dep !== task.task_id);
|
|
103
|
+
}
|
|
104
|
+
return { ok: true, tasks };
|
|
105
|
+
}
|
|
106
|
+
const SAFE_AUTHORITY = {
|
|
107
|
+
realOpenCodeDispatch: false,
|
|
108
|
+
providerCall: false,
|
|
109
|
+
runtimeExecution: false,
|
|
110
|
+
actualLaneLaunch: false,
|
|
111
|
+
fallbackAuthority: false,
|
|
112
|
+
hardCancelOrNoReplyAuthority: false,
|
|
113
|
+
toolAuthority: false,
|
|
114
|
+
};
|
|
115
|
+
function blocked(reason, workflowId) {
|
|
116
|
+
return { status: "blocked_before_workflow_authoring", workflowId, redactedBlockReason: reason, safeNextActions: ["/flowdesk-status", "/flowdesk-doctor"], authority: SAFE_AUTHORITY };
|
|
117
|
+
}
|
|
118
|
+
export async function executeFlowDeskWorkflowAuthorToolV1(input) {
|
|
119
|
+
if (!input.goalSummary?.trim())
|
|
120
|
+
return blocked("goalSummary is required");
|
|
121
|
+
if (!input.parentSessionId?.trim())
|
|
122
|
+
return blocked("parentSessionId is required");
|
|
123
|
+
if (!input.rootDir?.trim())
|
|
124
|
+
return blocked("rootDir is required");
|
|
125
|
+
if (!input.providerQualifiedModelId?.includes("/"))
|
|
126
|
+
return blocked("providerQualifiedModelId must be concrete");
|
|
127
|
+
if (!input.agentName?.trim())
|
|
128
|
+
return blocked("agentName is required");
|
|
129
|
+
const workflowId = input.workflowId?.trim() || `workflow-author-${randomBytes(5).toString("hex")}`;
|
|
130
|
+
const authoringResultId = randomId("authoring-result");
|
|
131
|
+
const taskGraphId = randomId("task-graph");
|
|
132
|
+
const promptText = [
|
|
133
|
+
"OUTPUT ONLY: Return a single raw JSON object. No thinking. No prose. No code fence. No explanation.",
|
|
134
|
+
"The JSON must have exactly this structure:",
|
|
135
|
+
'{"tasks":[{"task_id":"task-1","title":"Short title here","summary":"What this task does","agent_role":"implementation","depends_on":[]},{"task_id":"task-2","title":"Second task","summary":"What this task does","agent_role":"review","depends_on":["task-1"]}]}',
|
|
136
|
+
"Rules:",
|
|
137
|
+
"- Use exactly task-1, task-2, task-3, task-4 as task_ids (2 to 4 tasks)",
|
|
138
|
+
"- agent_role must be one of: implementation, review, verification, security, architecture, documentation, migration",
|
|
139
|
+
"- depends_on contains task_ids that must complete first (empty array if none)",
|
|
140
|
+
"- title max 80 chars, summary max 300 chars",
|
|
141
|
+
"- Start your response with { and end with }",
|
|
142
|
+
"",
|
|
143
|
+
`GOAL: ${input.goalSummary.slice(0, 400)}`,
|
|
144
|
+
].join("\n");
|
|
145
|
+
const taskResult = await executeFlowDeskAgentTaskV1({
|
|
146
|
+
workflowId,
|
|
147
|
+
taskId: randomId("task"),
|
|
148
|
+
laneId: randomId("lane"),
|
|
149
|
+
agentRef: `agent-${input.agentName.toLowerCase().replace(/[^a-z0-9-]/g, "-")}`,
|
|
150
|
+
providerQualifiedModelId: input.providerQualifiedModelId,
|
|
151
|
+
promptText,
|
|
152
|
+
parentSessionId: input.parentSessionId,
|
|
153
|
+
rootDir: input.rootDir,
|
|
154
|
+
client: input.client,
|
|
155
|
+
outputContract: "final_assistant_text",
|
|
156
|
+
});
|
|
157
|
+
if (taskResult.status !== "task_completed") {
|
|
158
|
+
const reason = taskResult.status === "task_failed" ? taskResult.redactedReason : taskResult.status === "task_launched" ? "async mode not supported for authoring" : "unknown";
|
|
159
|
+
return { status: "workflow_authoring_incomplete", workflowId, redactedBlockReason: reason, safeNextActions: ["/flowdesk-status"], authority: SAFE_AUTHORITY };
|
|
160
|
+
}
|
|
161
|
+
const parsed = extractJsonBlock(taskResult.resultText);
|
|
162
|
+
const { ok, tasks, error } = parseTasks(parsed);
|
|
163
|
+
if (!ok || tasks.length === 0)
|
|
164
|
+
return { status: "workflow_authoring_incomplete", workflowId, redactedBlockReason: `task parse failed: ${error ?? "no tasks"}`, safeNextActions: ["/flowdesk-status"], authority: SAFE_AUTHORITY };
|
|
165
|
+
const createdAt = new Date().toISOString();
|
|
166
|
+
const authoringRecord = {
|
|
167
|
+
schema_version: "flowdesk.workflow_authoring_result.v1",
|
|
168
|
+
workflow_id: workflowId,
|
|
169
|
+
authoring_result_id: authoringResultId,
|
|
170
|
+
goal_summary: safeText(input.goalSummary, 400),
|
|
171
|
+
scope_summary: `Planning evidence only: ${tasks.length} task(s) identified.`,
|
|
172
|
+
output_summary: "Task graph ready for agent assignment.",
|
|
173
|
+
risk_summary: "Planning only, no execution authority.",
|
|
174
|
+
status: "authored",
|
|
175
|
+
created_at: createdAt,
|
|
176
|
+
evidence_refs: [taskGraphId],
|
|
177
|
+
release_gate: "release1_planning_only",
|
|
178
|
+
dispatch_authority_enabled: false,
|
|
179
|
+
provider_call_made: false,
|
|
180
|
+
runtime_execution: false,
|
|
181
|
+
actual_lane_launch: false,
|
|
182
|
+
write_authority_enabled: false,
|
|
183
|
+
redaction_version: "v1",
|
|
184
|
+
};
|
|
185
|
+
const graphRecord = {
|
|
186
|
+
schema_version: "flowdesk.task_graph.v1",
|
|
187
|
+
workflow_id: workflowId,
|
|
188
|
+
task_graph_id: taskGraphId,
|
|
189
|
+
nodes: tasks.map(t => ({ task_id: t.task_id, title: t.title, summary: t.summary })),
|
|
190
|
+
edges: tasks.flatMap(t => t.depends_on.map(dep => ({ from_task_id: dep, to_task_id: t.task_id, relation: "depends_on" }))),
|
|
191
|
+
graph_summary: `${tasks.length} task(s) planned from goal.`,
|
|
192
|
+
created_at: createdAt,
|
|
193
|
+
release_gate: "release1_planning_only",
|
|
194
|
+
dispatch_authority_enabled: false,
|
|
195
|
+
provider_call_made: false,
|
|
196
|
+
runtime_execution: false,
|
|
197
|
+
actual_lane_launch: false,
|
|
198
|
+
write_authority_enabled: false,
|
|
199
|
+
redaction_version: "v1",
|
|
200
|
+
};
|
|
201
|
+
if (!validateFlowDeskWorkflowAuthoringResultV1(authoringRecord).ok)
|
|
202
|
+
return blocked("authoring record validation failed", workflowId);
|
|
203
|
+
if (!validateFlowDeskTaskGraphV1(graphRecord).ok)
|
|
204
|
+
return blocked("task graph validation failed", workflowId);
|
|
205
|
+
const intents = [
|
|
206
|
+
prepareFlowDeskSessionEvidenceWriteIntentV1({ workflowId, evidenceId: authoringResultId, record: authoringRecord }),
|
|
207
|
+
prepareFlowDeskSessionEvidenceWriteIntentV1({ workflowId, evidenceId: taskGraphId, record: graphRecord }),
|
|
208
|
+
];
|
|
209
|
+
if (intents.some(i => !i.ok || !i.writeIntent))
|
|
210
|
+
return blocked("evidence write intent preparation failed", workflowId);
|
|
211
|
+
const applied = applyFlowDeskSessionEvidenceWriteIntentsV1(input.rootDir, intents.map(i => i.writeIntent));
|
|
212
|
+
if (!applied.ok)
|
|
213
|
+
return blocked("evidence write failed", workflowId);
|
|
214
|
+
const reload = reloadFlowDeskSessionEvidenceV1({ workflowId, rootDir: input.rootDir });
|
|
215
|
+
if (!reload.ok || !reload.entries.some(e => e.evidenceId === authoringResultId))
|
|
216
|
+
return blocked("authoring evidence reload failed", workflowId);
|
|
217
|
+
return {
|
|
218
|
+
status: "workflow_authoring_completed",
|
|
219
|
+
workflowId,
|
|
220
|
+
authoringResultId,
|
|
221
|
+
taskGraphId,
|
|
222
|
+
taskCount: tasks.length,
|
|
223
|
+
safeNextActions: ["/flowdesk-status", "/flowdesk-export-debug"],
|
|
224
|
+
authority: SAFE_AUTHORITY,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=workflow-author-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-author-tool.js","sourceRoot":"","sources":["../src/workflow-author-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,18 @@ export interface FlowDeskWorkflowDispatchToolResultV1 {
|
|
|
29
29
|
laneId?: string;
|
|
30
30
|
taskId?: string;
|
|
31
31
|
taskResultEvidenceId?: string;
|
|
32
|
+
/**
|
|
33
|
+
* ADVISORY capture metadata for the coordinator's substance judgement. The
|
|
34
|
+
* workflow dispatch tool only confirms that a lane captured text; it does NOT
|
|
35
|
+
* judge whether the text actually satisfies the task. The coordinator reads
|
|
36
|
+
* this to decide success/failure and whether to re-select a model and retry.
|
|
37
|
+
*/
|
|
38
|
+
captureAdvisory?: {
|
|
39
|
+
outputKind?: string;
|
|
40
|
+
completionStatus?: string;
|
|
41
|
+
finalizationReason?: string;
|
|
42
|
+
looksLikeRefusalOrError?: boolean;
|
|
43
|
+
};
|
|
32
44
|
redactedBlockReason?: string;
|
|
33
45
|
summaryForUser: string;
|
|
34
46
|
safeNextActions: readonly ("/flowdesk-status" | "/flowdesk-export-debug" | "/flowdesk-doctor")[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-dispatch-tool.d.ts","sourceRoot":"","sources":["../src/workflow-dispatch-tool.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,+BAA+B,CAAC;AAEjG,MAAM,WAAW,oCAAoC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,2CAA2C,CAAC;CACpD;AAED,MAAM,WAAW,qCAAqC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qCAAqC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,qCAAqC,CAAC;IAC7C,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,oCAAoC;IACpD,MAAM,EACH,6BAA6B,GAC7B,8BAA8B,GAC9B,kCAAkC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,SAAS,CAAC,kBAAkB,GAAG,wBAAwB,GAAG,kBAAkB,CAAC,EAAE,CAAC;IACjG,SAAS,EAAE;QACV,oBAAoB,EAAE,KAAK,CAAC;QAC5B,YAAY,EAAE,OAAO,CAAC;QACtB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,gBAAgB,EAAE,OAAO,CAAC;QAC1B,iBAAiB,EAAE,KAAK,CAAC;QACzB,4BAA4B,EAAE,KAAK,CAAC;QACpC,aAAa,EAAE,KAAK,CAAC;QACrB,wBAAwB,EAAE,KAAK,CAAC;QAChC,gCAAgC,EAAE,KAAK,CAAC;QACxC,yBAAyB,EAAE,OAAO,CAAC;QACnC,6BAA6B,EAAE,OAAO,CAAC;QACvC,gCAAgC,EAAE,OAAO,CAAC;KAC1C,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"workflow-dispatch-tool.d.ts","sourceRoot":"","sources":["../src/workflow-dispatch-tool.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,+BAA+B,CAAC;AAEjG,MAAM,WAAW,oCAAoC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,2CAA2C,CAAC;CACpD;AAED,MAAM,WAAW,qCAAqC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qCAAqC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,qCAAqC,CAAC;IAC7C,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,oCAAoC;IACpD,MAAM,EACH,6BAA6B,GAC7B,8BAA8B,GAC9B,kCAAkC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,eAAe,CAAC,EAAE;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;KAClC,CAAC;IACF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,SAAS,CAAC,kBAAkB,GAAG,wBAAwB,GAAG,kBAAkB,CAAC,EAAE,CAAC;IACjG,SAAS,EAAE;QACV,oBAAoB,EAAE,KAAK,CAAC;QAC5B,YAAY,EAAE,OAAO,CAAC;QACtB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,gBAAgB,EAAE,OAAO,CAAC;QAC1B,iBAAiB,EAAE,KAAK,CAAC;QACzB,4BAA4B,EAAE,KAAK,CAAC;QACpC,aAAa,EAAE,KAAK,CAAC;QACrB,wBAAwB,EAAE,KAAK,CAAC;QAChC,gCAAgC,EAAE,KAAK,CAAC;QACxC,yBAAyB,EAAE,OAAO,CAAC;QACnC,6BAA6B,EAAE,OAAO,CAAC;QACvC,gCAAgC,EAAE,OAAO,CAAC;KAC1C,CAAC;CACF;AAmLD,wBAAsB,qCAAqC,CAAC,KAAK,EAAE;IAClE,MAAM,EAAE,oCAAoC,CAAC;IAC7C,OAAO,CAAC,EAAE,qCAAqC,CAAC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CACjB,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAwKhD"}
|
|
@@ -109,6 +109,26 @@ function terminalEvidencePresent(input) {
|
|
|
109
109
|
entry.evidenceClass === (input.completed ? "task_result" : "task_failed"));
|
|
110
110
|
return terminalLifecycle && terminalTaskEvidence;
|
|
111
111
|
}
|
|
112
|
+
function captureAdvisoryFor(input) {
|
|
113
|
+
const reload = reloadFlowDeskSessionEvidenceV1({
|
|
114
|
+
workflowId: input.workflowId,
|
|
115
|
+
rootDir: input.rootDir,
|
|
116
|
+
});
|
|
117
|
+
if (!reload.ok || reload.blocked.length > 0)
|
|
118
|
+
return undefined;
|
|
119
|
+
const entry = reload.entries.find((e) => e.evidenceClass === "task_result" &&
|
|
120
|
+
e.record.lane_id === input.laneId &&
|
|
121
|
+
e.record.task_id === input.taskId);
|
|
122
|
+
if (entry === undefined)
|
|
123
|
+
return undefined;
|
|
124
|
+
const record = entry.record;
|
|
125
|
+
return {
|
|
126
|
+
...(typeof record.output_kind === "string" ? { outputKind: record.output_kind } : {}),
|
|
127
|
+
...(typeof record.completion_status === "string" ? { completionStatus: record.completion_status } : {}),
|
|
128
|
+
...(typeof record.finalization_reason === "string" ? { finalizationReason: record.finalization_reason } : {}),
|
|
129
|
+
...(typeof record.looks_like_refusal_or_error === "boolean" ? { looksLikeRefusalOrError: record.looks_like_refusal_or_error } : {}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
112
132
|
function planningLabel(value) {
|
|
113
133
|
return value
|
|
114
134
|
.replaceAll(/real\s*-?(?:opencode\s*-?)?dispatch/gi, "explicit dev-mode workflow")
|
|
@@ -253,6 +273,13 @@ export async function executeFlowDeskWorkflowDispatchToolV1(input) {
|
|
|
253
273
|
planPersisted: true,
|
|
254
274
|
actualLaneLaunchAttempted: true,
|
|
255
275
|
});
|
|
276
|
+
// Capture/judgement separation: if the lane captured any text we report it as
|
|
277
|
+
// completed (captured) and surface advisory metadata. We do NOT mark the
|
|
278
|
+
// dispatch incomplete just because the captured text "looks like" process
|
|
279
|
+
// notes or lacks a strict format — the coordinator judges substance.
|
|
280
|
+
const captureAdvisory = completed
|
|
281
|
+
? captureAdvisoryFor({ rootDir: input.config.rootDir, workflowId, laneId, taskId })
|
|
282
|
+
: undefined;
|
|
256
283
|
return {
|
|
257
284
|
status: completed ? "workflow_dispatch_completed" : "workflow_dispatch_incomplete",
|
|
258
285
|
rootDir: input.config.rootDir,
|
|
@@ -261,10 +288,11 @@ export async function executeFlowDeskWorkflowDispatchToolV1(input) {
|
|
|
261
288
|
parentSessionId: request.parentSessionId,
|
|
262
289
|
laneId,
|
|
263
290
|
taskId,
|
|
264
|
-
...(completed ? { taskResultEvidenceId: taskResult.taskResultEvidenceId } : { redactedBlockReason: taskResult.redactedReason }),
|
|
291
|
+
...(completed ? { taskResultEvidenceId: taskResult.taskResultEvidenceId } : { redactedBlockReason: taskResult.status === "task_failed" ? taskResult.redactedReason : taskResult.status === "task_launched" ? "async mode" : "unknown" }),
|
|
292
|
+
...(captureAdvisory === undefined ? {} : { captureAdvisory }),
|
|
265
293
|
summaryForUser: completed
|
|
266
|
-
? `FlowDesk dev-mode workflow dispatch
|
|
267
|
-
: `FlowDesk dev-mode workflow dispatch launched one lane but
|
|
294
|
+
? `FlowDesk dev-mode workflow dispatch captured one lane result for ${workflowId} (advisory: ${captureAdvisory?.outputKind ?? "unknown"}${captureAdvisory?.looksLikeRefusalOrError ? ", looks-like-refusal/error" : ""}). The coordinator judges substance. Default Release 1 dispatch authority remains disabled.`
|
|
295
|
+
: `FlowDesk dev-mode workflow dispatch launched one lane but captured no result: ${taskResult.status === "task_failed" ? taskResult.redactedReason : taskResult.status === "task_launched" ? "async lane launched" : "unknown"}. Default Release 1 dispatch authority remains disabled.`,
|
|
268
296
|
safeNextActions: safeNextActions(),
|
|
269
297
|
authority: authority({
|
|
270
298
|
developerModeAcknowledged: true,
|