@flowdesk/opencode-plugin 0.1.13 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-task-output.d.ts +17 -0
  3. package/dist/agent-task-output.d.ts.map +1 -0
  4. package/dist/agent-task-output.js +119 -0
  5. package/dist/agent-task-output.js.map +1 -0
  6. package/dist/agent-task-runner.d.ts +23 -0
  7. package/dist/agent-task-runner.d.ts.map +1 -1
  8. package/dist/agent-task-runner.js +410 -81
  9. package/dist/agent-task-runner.js.map +1 -1
  10. package/dist/auto-continue-preview-tool.d.ts +36 -0
  11. package/dist/auto-continue-preview-tool.d.ts.map +1 -0
  12. package/dist/auto-continue-preview-tool.js +119 -0
  13. package/dist/auto-continue-preview-tool.js.map +1 -0
  14. package/dist/completion-ui-cache.d.ts +6 -0
  15. package/dist/completion-ui-cache.d.ts.map +1 -0
  16. package/dist/completion-ui-cache.js +260 -0
  17. package/dist/completion-ui-cache.js.map +1 -0
  18. package/dist/event-hook-observer.d.ts +14 -0
  19. package/dist/event-hook-observer.d.ts.map +1 -0
  20. package/dist/event-hook-observer.js +193 -0
  21. package/dist/event-hook-observer.js.map +1 -0
  22. package/dist/managed-dispatch-adapter.d.ts.map +1 -1
  23. package/dist/managed-dispatch-adapter.js +7 -3
  24. package/dist/managed-dispatch-adapter.js.map +1 -1
  25. package/dist/model-selection-engine.d.ts +47 -0
  26. package/dist/model-selection-engine.d.ts.map +1 -0
  27. package/dist/model-selection-engine.js +175 -0
  28. package/dist/model-selection-engine.js.map +1 -0
  29. package/dist/provider-usage-live-tool.d.ts +10 -0
  30. package/dist/provider-usage-live-tool.d.ts.map +1 -1
  31. package/dist/provider-usage-live-tool.js +145 -18
  32. package/dist/provider-usage-live-tool.js.map +1 -1
  33. package/dist/server.d.ts +35 -1
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +447 -19
  36. package/dist/server.js.map +1 -1
  37. package/dist/stall-recovery.d.ts +33 -0
  38. package/dist/stall-recovery.d.ts.map +1 -1
  39. package/dist/stall-recovery.js +459 -2
  40. package/dist/stall-recovery.js.map +1 -1
  41. package/dist/status-live-tool.d.ts +54 -0
  42. package/dist/status-live-tool.d.ts.map +1 -1
  43. package/dist/status-live-tool.js +448 -44
  44. package/dist/status-live-tool.js.map +1 -1
  45. package/dist/tui-subtask-activity.d.ts +69 -0
  46. package/dist/tui-subtask-activity.d.ts.map +1 -0
  47. package/dist/tui-subtask-activity.js +266 -0
  48. package/dist/tui-subtask-activity.js.map +1 -0
  49. package/dist/tui-usage-snapshot.d.ts +14 -0
  50. package/dist/tui-usage-snapshot.d.ts.map +1 -1
  51. package/dist/tui-usage-snapshot.js +189 -8
  52. package/dist/tui-usage-snapshot.js.map +1 -1
  53. package/dist/tui.d.ts.map +1 -1
  54. package/dist/tui.js +72 -41
  55. package/dist/tui.js.map +1 -1
  56. package/dist/workflow-assign-tool.d.ts +23 -0
  57. package/dist/workflow-assign-tool.d.ts.map +1 -0
  58. package/dist/workflow-assign-tool.js +117 -0
  59. package/dist/workflow-assign-tool.js.map +1 -0
  60. package/dist/workflow-author-tool.d.ts +29 -0
  61. package/dist/workflow-author-tool.d.ts.map +1 -0
  62. package/dist/workflow-author-tool.js +227 -0
  63. package/dist/workflow-author-tool.js.map +1 -0
  64. package/dist/workflow-dispatch-tool.d.ts.map +1 -1
  65. package/dist/workflow-dispatch-tool.js +32 -2
  66. package/dist/workflow-dispatch-tool.js.map +1 -1
  67. package/dist/workflow-orchestrator.d.ts +31 -0
  68. package/dist/workflow-orchestrator.d.ts.map +1 -0
  69. package/dist/workflow-orchestrator.js +160 -0
  70. package/dist/workflow-orchestrator.js.map +1 -0
  71. package/dist/workflow-scheduler.d.ts.map +1 -1
  72. package/dist/workflow-scheduler.js +3 -1
  73. package/dist/workflow-scheduler.js.map +1 -1
  74. package/dist/workflow-synthesis-tool.d.ts +31 -0
  75. package/dist/workflow-synthesis-tool.d.ts.map +1 -0
  76. package/dist/workflow-synthesis-tool.js +194 -0
  77. package/dist/workflow-synthesis-tool.js.map +1 -0
  78. package/package.json +2 -2
@@ -0,0 +1,160 @@
1
+ /**
2
+ * FlowDesk Workflow Orchestrator
3
+ * Chains: Author → Assign → Schedule → Synthesize
4
+ * All authority flags remain false throughout.
5
+ */
6
+ import { reloadFlowDeskSessionEvidenceV1, } from "@flowdesk/core";
7
+ import { executeFlowDeskWorkflowAuthorToolV1 } from "./workflow-author-tool.js";
8
+ import { executeFlowDeskWorkflowAssignToolV1 } from "./workflow-assign-tool.js";
9
+ import { executeFlowDeskWorkflowSchedulerV1 } from "./workflow-scheduler.js";
10
+ import { executeFlowDeskWorkflowSynthesisToolV1 } from "./workflow-synthesis-tool.js";
11
+ import { loadFlowDeskTuiUsageSnapshotViewV1 } from "./tui-usage-snapshot.js";
12
+ const SAFE_AUTHORITY = {
13
+ realOpenCodeDispatch: false,
14
+ providerCall: false,
15
+ runtimeExecution: false,
16
+ actualLaneLaunch: false,
17
+ fallbackAuthority: false,
18
+ hardCancelOrNoReplyAuthority: false,
19
+ };
20
+ function blocked(reason, workflowId) {
21
+ return {
22
+ status: "blocked_before_orchestration",
23
+ workflowId,
24
+ redactedBlockReason: reason,
25
+ summaryForUser: `FlowDesk orchestration blocked: ${reason}`,
26
+ safeNextActions: ["/flowdesk-status", "/flowdesk-doctor"],
27
+ authority: SAFE_AUTHORITY,
28
+ };
29
+ }
30
+ export async function executeFlowDeskWorkflowOrchestratorV1(input) {
31
+ // Validate inputs
32
+ if (!input.goalSummary?.trim())
33
+ return blocked("goalSummary is required");
34
+ if (!input.parentSessionId?.trim())
35
+ return blocked("parentSessionId is required");
36
+ if (!input.rootDir?.trim())
37
+ return blocked("rootDir is required");
38
+ if (!input.providerQualifiedModelId?.includes("/"))
39
+ return blocked("providerQualifiedModelId must be concrete");
40
+ if (!input.agentName?.trim())
41
+ return blocked("agentName is required");
42
+ // ── Step 1: Author — decompose goal into task graph ────────────────────
43
+ const authorResult = await executeFlowDeskWorkflowAuthorToolV1({
44
+ workflowId: input.workflowId,
45
+ goalSummary: input.goalSummary,
46
+ parentSessionId: input.parentSessionId,
47
+ rootDir: input.rootDir,
48
+ client: input.client,
49
+ providerQualifiedModelId: input.providerQualifiedModelId,
50
+ agentName: input.agentName,
51
+ });
52
+ if (authorResult.status !== "workflow_authoring_completed" || !authorResult.workflowId || !authorResult.taskCount) {
53
+ return {
54
+ status: "orchestration_incomplete",
55
+ workflowId: authorResult.workflowId,
56
+ redactedBlockReason: authorResult.redactedBlockReason ?? "authoring did not complete",
57
+ summaryForUser: `FlowDesk orchestration stopped at authoring: ${authorResult.redactedBlockReason ?? "unknown"}`,
58
+ safeNextActions: ["/flowdesk-status"],
59
+ authority: SAFE_AUTHORITY,
60
+ };
61
+ }
62
+ const workflowId = authorResult.workflowId;
63
+ // ── Step 2: Assign — pick agents/models per task from usage ────────────
64
+ const usageView = loadFlowDeskTuiUsageSnapshotViewV1({
65
+ rootDir: input.rootDir,
66
+ workflowId: "workflow-provider-usage-live",
67
+ });
68
+ const assignResult = executeFlowDeskWorkflowAssignToolV1({
69
+ workflowId,
70
+ rootDir: input.rootDir,
71
+ sidebarCacheRows: usageView.providers.filter(p => p.connected),
72
+ });
73
+ if (assignResult.status !== "assignments_written") {
74
+ return {
75
+ status: "orchestration_incomplete",
76
+ workflowId,
77
+ redactedBlockReason: assignResult.redactedBlockReason ?? "assignment did not complete",
78
+ summaryForUser: `FlowDesk orchestration stopped at assignment: ${assignResult.redactedBlockReason ?? "unknown"}`,
79
+ safeNextActions: ["/flowdesk-status"],
80
+ authority: SAFE_AUTHORITY,
81
+ };
82
+ }
83
+ // ── Step 3: Schedule — execute tasks in DAG order ─────────────────────
84
+ const reload = reloadFlowDeskSessionEvidenceV1({ workflowId, rootDir: input.rootDir });
85
+ if (!reload.ok)
86
+ return {
87
+ status: "orchestration_incomplete",
88
+ workflowId,
89
+ redactedBlockReason: "evidence reload failed before scheduling",
90
+ summaryForUser: "FlowDesk orchestration stopped: could not reload evidence before scheduling.",
91
+ safeNextActions: ["/flowdesk-status"],
92
+ authority: SAFE_AUTHORITY,
93
+ };
94
+ const graphEntry = reload.entries.find(e => e.evidenceClass === "task_graph");
95
+ const selectionEntries = reload.entries.filter(e => e.evidenceClass === "task_model_selection");
96
+ if (!graphEntry)
97
+ return {
98
+ status: "orchestration_incomplete",
99
+ workflowId,
100
+ redactedBlockReason: "task_graph evidence not found after authoring",
101
+ summaryForUser: "FlowDesk orchestration stopped: task graph evidence missing.",
102
+ safeNextActions: ["/flowdesk-status"],
103
+ authority: SAFE_AUTHORITY,
104
+ };
105
+ const taskGraph = graphEntry.record;
106
+ const modelSelections = selectionEntries.map(e => e.record);
107
+ const schedulerResult = await executeFlowDeskWorkflowSchedulerV1({
108
+ taskGraph,
109
+ modelSelections,
110
+ parentSessionId: input.parentSessionId,
111
+ rootDir: input.rootDir,
112
+ client: input.client,
113
+ agentRef: `agent-${input.agentName.toLowerCase().replace(/[^a-z0-9-]/g, "-")}`,
114
+ });
115
+ if (schedulerResult.status !== "workflow_completed") {
116
+ return {
117
+ status: "orchestration_incomplete",
118
+ workflowId,
119
+ taskCount: authorResult.taskCount,
120
+ executedTaskIds: schedulerResult.executedTaskIds,
121
+ redactedBlockReason: schedulerResult.redactedReason ?? "scheduler did not complete all tasks",
122
+ summaryForUser: `FlowDesk orchestration stopped at execution (${schedulerResult.executedTaskIds.length}/${authorResult.taskCount} tasks done): ${schedulerResult.redactedReason ?? "unknown"}`,
123
+ safeNextActions: ["/flowdesk-status"],
124
+ authority: SAFE_AUTHORITY,
125
+ };
126
+ }
127
+ // ── Step 4: Synthesize — aggregate task results ────────────────────────
128
+ const synthesisResult = await executeFlowDeskWorkflowSynthesisToolV1({
129
+ workflowId,
130
+ rootDir: input.rootDir,
131
+ client: input.client,
132
+ parentSessionId: input.parentSessionId,
133
+ providerQualifiedModelId: input.providerQualifiedModelId,
134
+ agentName: input.agentName,
135
+ });
136
+ if (synthesisResult.status !== "workflow_synthesis_completed") {
137
+ return {
138
+ status: "orchestration_incomplete",
139
+ workflowId,
140
+ taskCount: authorResult.taskCount,
141
+ executedTaskIds: schedulerResult.executedTaskIds,
142
+ redactedBlockReason: synthesisResult.redactedBlockReason ?? "synthesis did not complete",
143
+ summaryForUser: `FlowDesk tasks completed but synthesis stopped: ${synthesisResult.redactedBlockReason ?? "unknown"}`,
144
+ safeNextActions: ["/flowdesk-status"],
145
+ authority: SAFE_AUTHORITY,
146
+ };
147
+ }
148
+ return {
149
+ status: "orchestration_completed",
150
+ workflowId,
151
+ taskCount: authorResult.taskCount,
152
+ executedTaskIds: schedulerResult.executedTaskIds,
153
+ synthesisId: synthesisResult.synthesisId,
154
+ conflictDetected: synthesisResult.conflictDetected,
155
+ summaryForUser: synthesisResult.summaryForUser,
156
+ safeNextActions: ["/flowdesk-status", "/flowdesk-export-debug"],
157
+ authority: SAFE_AUTHORITY,
158
+ };
159
+ }
160
+ //# sourceMappingURL=workflow-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-orchestrator.js","sourceRoot":"","sources":["../src/workflow-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-scheduler.d.ts","sourceRoot":"","sources":["../src/workflow-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAA8B,KAAK,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnI,MAAM,WAAW,gCAAgC;IAChD,SAAS,EAAE,mBAAmB,CAAC;IAC/B,eAAe,EAAE,4BAA4B,EAAE,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvF;AAED,MAAM,WAAW,iCAAiC;IACjD,MAAM,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IACrD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,kCAAkC,CACvD,KAAK,EAAE,gCAAgC,GACrC,OAAO,CAAC,iCAAiC,CAAC,CA6C5C"}
1
+ {"version":3,"file":"workflow-scheduler.d.ts","sourceRoot":"","sources":["../src/workflow-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAA8B,KAAK,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEnI,MAAM,WAAW,gCAAgC;IAChD,SAAS,EAAE,mBAAmB,CAAC;IAC/B,eAAe,EAAE,4BAA4B,EAAE,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvF;AAED,MAAM,WAAW,iCAAiC;IACjD,MAAM,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IACrD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,kCAAkC,CACvD,KAAK,EAAE,gCAAgC,GACrC,OAAO,CAAC,iCAAiC,CAAC,CA+C5C"}
@@ -34,7 +34,9 @@ export async function executeFlowDeskWorkflowSchedulerV1(input) {
34
34
  results[next.task_id] = result;
35
35
  executedTaskIds.push(next.task_id);
36
36
  if (result.status !== "task_completed") {
37
- return { status: "workflow_incomplete", executedTaskIds, results, redactedReason: result.redactedReason };
37
+ const reason = result.status === "task_failed" ? result.redactedReason
38
+ : result.status === "task_launched" ? `async lane launched: ${result.laneId}` : "unknown";
39
+ return { status: "workflow_incomplete", executedTaskIds, results, redactedReason: reason };
38
40
  }
39
41
  done.add(next.task_id);
40
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-scheduler.js","sourceRoot":"","sources":["../src/workflow-scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-scheduler.js","sourceRoot":"","sources":["../src/workflow-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type FlowDeskAgentTaskInputV1 } from "./agent-task-runner.js";
2
+ export interface FlowDeskWorkflowSynthesisToolResultV1 {
3
+ status: "workflow_synthesis_completed" | "workflow_synthesis_incomplete" | "blocked_before_synthesis";
4
+ workflowId?: string;
5
+ synthesisId?: string;
6
+ tasksSummarized?: number;
7
+ conflictDetected?: boolean;
8
+ redactedBlockReason?: string;
9
+ summaryForUser: string;
10
+ safeNextActions: readonly string[];
11
+ authority: {
12
+ realOpenCodeDispatch: false;
13
+ providerCall: false;
14
+ runtimeExecution: false;
15
+ actualLaneLaunch: false;
16
+ fallbackAuthority: false;
17
+ };
18
+ }
19
+ export declare function executeFlowDeskWorkflowSynthesisPreviewV1(input: {
20
+ workflowId: string;
21
+ rootDir: string;
22
+ }): FlowDeskWorkflowSynthesisToolResultV1;
23
+ export declare function executeFlowDeskWorkflowSynthesisToolV1(input: {
24
+ workflowId: string;
25
+ rootDir: string;
26
+ client: FlowDeskAgentTaskInputV1["client"];
27
+ parentSessionId: string;
28
+ providerQualifiedModelId: string;
29
+ agentName: string;
30
+ }): Promise<FlowDeskWorkflowSynthesisToolResultV1>;
31
+ //# sourceMappingURL=workflow-synthesis-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-synthesis-tool.d.ts","sourceRoot":"","sources":["../src/workflow-synthesis-tool.ts"],"names":[],"mappings":"AAOA,OAAO,EAA8B,KAAK,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAqBnG,MAAM,WAAW,qCAAqC;IACrD,MAAM,EAAE,8BAA8B,GAAG,+BAA+B,GAAG,0BAA0B,CAAC;IACtG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,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;AAwGD,wBAAgB,yCAAyC,CAAC,KAAK,EAAE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB,GAAG,qCAAqC,CAqBxC;AAED,wBAAsB,sCAAsC,CAAC,KAAK,EAAE;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAwDjD"}
@@ -0,0 +1,194 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { validateFlowDeskWorkflowSynthesisResultV1, applyFlowDeskSessionEvidenceWriteIntentsV1, prepareFlowDeskSessionEvidenceWriteIntentV1, reloadFlowDeskSessionEvidenceV1, } from "@flowdesk/core";
3
+ import { executeFlowDeskAgentTaskV1 } from "./agent-task-runner.js";
4
+ import { refreshFlowDeskCompletionUiCachesV1 } from "./completion-ui-cache.js";
5
+ function extractJsonBlock(text) {
6
+ const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/);
7
+ if (fenced?.[1]) {
8
+ try {
9
+ return JSON.parse(fenced[1].trim());
10
+ }
11
+ catch { /* fall through */ }
12
+ }
13
+ const bare = text.match(/\{[\s\S]*\}/);
14
+ if (bare) {
15
+ try {
16
+ return JSON.parse(bare[0]);
17
+ }
18
+ catch { /* fall through */ }
19
+ }
20
+ return null;
21
+ }
22
+ function clamp(text, max) {
23
+ return text.length > max ? text.slice(0, max - 1) + "…" : text;
24
+ }
25
+ const FORBIDDEN_MARKERS = /system prompt|provider payload|raw token|hidden injection|opencode\srun|dispatch|fallback|reselect/i;
26
+ const SAFE_AUTHORITY = { realOpenCodeDispatch: false, providerCall: false, runtimeExecution: false, actualLaneLaunch: false, fallbackAuthority: false };
27
+ function blocked(reason, workflowId) {
28
+ return { status: "blocked_before_synthesis", workflowId, redactedBlockReason: reason, summaryForUser: `Blocked: ${reason}`, safeNextActions: ["/flowdesk-status", "/flowdesk-doctor"], authority: SAFE_AUTHORITY };
29
+ }
30
+ function collectTaskResultSummaries(input) {
31
+ const reload = reloadFlowDeskSessionEvidenceV1({ workflowId: input.workflowId, rootDir: input.rootDir });
32
+ if (!reload.ok)
33
+ return { ok: false, result: blocked("session evidence reload failed", input.workflowId) };
34
+ const taskResultEntries = reload.entries.filter(e => e.evidenceClass === "task_result");
35
+ if (taskResultEntries.length === 0)
36
+ return { ok: false, result: blocked("no task_result evidence found – run scheduler first", input.workflowId) };
37
+ const summaries = [];
38
+ let conflictDetected = false;
39
+ const conflictKeywords = /conflict|contradict|blocked|failed|changes_required|invalid|error/i;
40
+ for (const entry of taskResultEntries.slice(0, 10)) {
41
+ const record = entry.record;
42
+ const rawText = typeof record.result_text === "string" ? record.result_text : "(no output)";
43
+ const redacted = FORBIDDEN_MARKERS.test(rawText) ? "(redacted)" : clamp(rawText, 500);
44
+ const taskId = typeof record.task_id === "string" ? record.task_id : entry.evidenceId;
45
+ const status = "completed";
46
+ if (conflictKeywords.test(redacted))
47
+ conflictDetected = true;
48
+ summaries.push({ taskId, status, text: redacted });
49
+ }
50
+ return { ok: true, summaries, conflictDetected };
51
+ }
52
+ function writeWorkflowSynthesisResult(input) {
53
+ const synthesisId = `synthesis-${randomBytes(5).toString("hex")}`;
54
+ const synthesisRecord = {
55
+ schema_version: "flowdesk.workflow_synthesis_result.v1",
56
+ workflow_id: input.workflowId,
57
+ synthesis_id: synthesisId,
58
+ tasks_summarized: input.summaries.length,
59
+ task_refs: input.summaries.map(s => s.taskId),
60
+ conflict_detected: input.conflictDetected,
61
+ synthesis_summary: input.synthesisSummary,
62
+ safe_next_actions: ["/flowdesk-status", "/flowdesk-export-debug"],
63
+ };
64
+ if (!validateFlowDeskWorkflowSynthesisResultV1(synthesisRecord).ok) {
65
+ return { status: "workflow_synthesis_incomplete", workflowId: input.workflowId, redactedBlockReason: "synthesis record validation failed", summaryForUser: "Synthesis validation failed.", safeNextActions: ["/flowdesk-status"], authority: SAFE_AUTHORITY };
66
+ }
67
+ const prepared = prepareFlowDeskSessionEvidenceWriteIntentV1({ workflowId: input.workflowId, evidenceId: synthesisId, record: synthesisRecord });
68
+ if (!prepared.ok || !prepared.writeIntent)
69
+ return blocked("synthesis write intent failed", input.workflowId);
70
+ const applied = applyFlowDeskSessionEvidenceWriteIntentsV1(input.rootDir, [prepared.writeIntent]);
71
+ if (!applied.ok)
72
+ return blocked("synthesis evidence write failed", input.workflowId);
73
+ refreshFlowDeskCompletionUiCachesV1({
74
+ rootDir: input.rootDir,
75
+ workflowId: input.workflowId,
76
+ });
77
+ return {
78
+ status: "workflow_synthesis_completed",
79
+ workflowId: input.workflowId,
80
+ synthesisId,
81
+ tasksSummarized: input.summaries.length,
82
+ conflictDetected: input.conflictDetected,
83
+ summaryForUser: input.synthesisSummary,
84
+ safeNextActions: ["/flowdesk-status", "/flowdesk-export-debug"],
85
+ authority: SAFE_AUTHORITY,
86
+ };
87
+ }
88
+ function existingWorkflowSynthesisResult(input) {
89
+ const reload = reloadFlowDeskSessionEvidenceV1({ workflowId: input.workflowId, rootDir: input.rootDir });
90
+ if (!reload.ok)
91
+ return undefined;
92
+ const existing = reload.entries.find((entry) => entry.evidenceClass === "workflow_synthesis_result");
93
+ if (!existing)
94
+ return undefined;
95
+ const record = existing.record;
96
+ const synthesisId = typeof record.synthesis_id === "string" ? record.synthesis_id : existing.evidenceId;
97
+ refreshFlowDeskCompletionUiCachesV1({
98
+ rootDir: input.rootDir,
99
+ workflowId: input.workflowId,
100
+ });
101
+ return {
102
+ status: "workflow_synthesis_completed",
103
+ workflowId: input.workflowId,
104
+ synthesisId,
105
+ tasksSummarized: typeof record.tasks_summarized === "number" ? record.tasks_summarized : 0,
106
+ conflictDetected: record.conflict_detected === true,
107
+ summaryForUser: typeof record.synthesis_summary === "string" ? record.synthesis_summary : "Existing synthesis preview.",
108
+ safeNextActions: ["/flowdesk-status", "/flowdesk-export-debug"],
109
+ authority: SAFE_AUTHORITY,
110
+ };
111
+ }
112
+ export function executeFlowDeskWorkflowSynthesisPreviewV1(input) {
113
+ if (!input.workflowId?.trim())
114
+ return blocked("workflowId is required");
115
+ if (!input.rootDir?.trim())
116
+ return blocked("rootDir is required");
117
+ const existing = existingWorkflowSynthesisResult({ workflowId: input.workflowId, rootDir: input.rootDir });
118
+ if (existing)
119
+ return existing;
120
+ const collected = collectTaskResultSummaries({ workflowId: input.workflowId, rootDir: input.rootDir });
121
+ if (!collected.ok)
122
+ return collected.result;
123
+ const previewText = collected.summaries
124
+ .map(s => `${s.taskId}: ${s.text}`)
125
+ .join("; ");
126
+ const synthesisSummary = clamp(`Provider-free synthesis preview for ${collected.summaries.length} task result(s). ${previewText}`, 650);
127
+ return writeWorkflowSynthesisResult({
128
+ workflowId: input.workflowId,
129
+ rootDir: input.rootDir,
130
+ summaries: collected.summaries,
131
+ conflictDetected: collected.conflictDetected,
132
+ synthesisSummary,
133
+ });
134
+ }
135
+ export async function executeFlowDeskWorkflowSynthesisToolV1(input) {
136
+ if (!input.workflowId?.trim())
137
+ return blocked("workflowId is required");
138
+ if (!input.rootDir?.trim())
139
+ return blocked("rootDir is required");
140
+ if (!input.parentSessionId?.trim())
141
+ return blocked("parentSessionId is required");
142
+ if (!input.providerQualifiedModelId?.includes("/"))
143
+ return blocked("providerQualifiedModelId must be concrete");
144
+ if (!input.agentName?.trim())
145
+ return blocked("agentName is required");
146
+ const existing = existingWorkflowSynthesisResult({ workflowId: input.workflowId, rootDir: input.rootDir });
147
+ if (existing)
148
+ return existing;
149
+ const collected = collectTaskResultSummaries({ workflowId: input.workflowId, rootDir: input.rootDir });
150
+ if (!collected.ok)
151
+ return collected.result;
152
+ const summaries = collected.summaries;
153
+ let conflictDetected = collected.conflictDetected;
154
+ const promptText = [
155
+ "You are a results synthesizer. Read the following task results and provide a concise, bounded synthesis.",
156
+ "Return ONLY a JSON object: { \"synthesis_summary\": string (≤600 chars, no raw tokens/payloads/dispatch wording), \"conflict_detected\": boolean }",
157
+ "No execution authority. Redacted summaries only.",
158
+ "---",
159
+ summaries.map(s => `Task ${s.taskId} (${s.status}): ${s.text}`).join("\n"),
160
+ ].join("\n");
161
+ const taskResult = await executeFlowDeskAgentTaskV1({
162
+ workflowId: input.workflowId,
163
+ taskId: `task-synth-${randomBytes(4).toString("hex")}`,
164
+ laneId: `lane-synth-${randomBytes(4).toString("hex")}`,
165
+ agentRef: `agent-${input.agentName.toLowerCase().replace(/[^a-z0-9-]/g, "-")}`,
166
+ providerQualifiedModelId: input.providerQualifiedModelId,
167
+ promptText,
168
+ parentSessionId: input.parentSessionId,
169
+ rootDir: input.rootDir,
170
+ client: input.client,
171
+ outputContract: "final_assistant_text",
172
+ });
173
+ let synthesisSummary = `Synthesized ${summaries.length} task result(s). Conflict: ${conflictDetected}.`;
174
+ if (taskResult.status === "task_completed") {
175
+ const parsed = extractJsonBlock(taskResult.resultText);
176
+ if (parsed && typeof parsed === "object" && "synthesis_summary" in parsed) {
177
+ const raw = parsed.synthesis_summary;
178
+ if (typeof raw === "string" && !FORBIDDEN_MARKERS.test(raw)) {
179
+ synthesisSummary = clamp(raw, 700);
180
+ if (typeof parsed.conflict_detected === "boolean") {
181
+ conflictDetected = parsed.conflict_detected;
182
+ }
183
+ }
184
+ }
185
+ }
186
+ return writeWorkflowSynthesisResult({
187
+ workflowId: input.workflowId,
188
+ rootDir: input.rootDir,
189
+ summaries,
190
+ conflictDetected,
191
+ synthesisSummary,
192
+ });
193
+ }
194
+ //# sourceMappingURL=workflow-synthesis-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-synthesis-tool.js","sourceRoot":"","sources":["../src/workflow-synthesis-tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowdesk/opencode-plugin",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "FlowDesk OpenCode plugin with Release 1 non-dispatch command-backed registration.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -62,7 +62,7 @@
62
62
  "test": "npm run build && node --test dist/**/*.test.js"
63
63
  },
64
64
  "dependencies": {
65
- "@flowdesk/core": "^0.1.12"
65
+ "@flowdesk/core": "^0.1.14"
66
66
  },
67
67
  "peerDependencies": {
68
68
  "@opentui/core": ">=0.2.15",