@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
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { reloadFlowDeskSessionEvidenceV1, } from "@flowdesk/core";
|
|
4
|
+
const FORBIDDEN_SUMMARY_MARKERS = /system prompt|provider payload|raw token|hidden injection|opencode\srun|dispatch|fallback|reselect/i;
|
|
5
|
+
const SUBTASK_ACTIVITY_CACHE_ROW_LIMIT = 20;
|
|
6
|
+
const GENERIC_TASK_SUMMARY_WORDS = new Set([
|
|
7
|
+
"architecture",
|
|
8
|
+
"architectural",
|
|
9
|
+
"verification",
|
|
10
|
+
"implementation",
|
|
11
|
+
"planning",
|
|
12
|
+
"subtask",
|
|
13
|
+
"task",
|
|
14
|
+
"agent",
|
|
15
|
+
"lane",
|
|
16
|
+
"for",
|
|
17
|
+
"flowdesk",
|
|
18
|
+
"repo",
|
|
19
|
+
"repository",
|
|
20
|
+
"please",
|
|
21
|
+
"goal",
|
|
22
|
+
"inspect",
|
|
23
|
+
"assess",
|
|
24
|
+
"propose",
|
|
25
|
+
]);
|
|
26
|
+
function getString(record, key) {
|
|
27
|
+
const value = record[key];
|
|
28
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
29
|
+
}
|
|
30
|
+
function latestByLane(entries, evidenceClass) {
|
|
31
|
+
const byLane = new Map();
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
if (entry.evidenceClass !== evidenceClass)
|
|
34
|
+
continue;
|
|
35
|
+
const laneId = getString(entry.record, "lane_id");
|
|
36
|
+
if (laneId === undefined)
|
|
37
|
+
continue;
|
|
38
|
+
const existing = byLane.get(laneId);
|
|
39
|
+
const entryTime = observedTime(getString(entry.record, "updated_at") ?? getString(entry.record, "created_at") ?? getString(entry.record, "observed_at"));
|
|
40
|
+
const existingTime = existing === undefined ? -1 : observedTime(getString(existing.record, "updated_at") ?? getString(existing.record, "created_at") ?? getString(existing.record, "observed_at"));
|
|
41
|
+
if (existing === undefined || entryTime >= existingTime)
|
|
42
|
+
byLane.set(laneId, entry);
|
|
43
|
+
}
|
|
44
|
+
return byLane;
|
|
45
|
+
}
|
|
46
|
+
function isRecord(value) {
|
|
47
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
48
|
+
}
|
|
49
|
+
function readJsonRecord(path) {
|
|
50
|
+
try {
|
|
51
|
+
if (!existsSync(path))
|
|
52
|
+
return undefined;
|
|
53
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
54
|
+
return isRecord(parsed) ? parsed : undefined;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function observedTime(value) {
|
|
61
|
+
return typeof value === "string" && Number.isFinite(Date.parse(value)) ? Date.parse(value) : 0;
|
|
62
|
+
}
|
|
63
|
+
function monotonicObservedAt(candidate, existing) {
|
|
64
|
+
const candidateMs = observedTime(candidate);
|
|
65
|
+
const existingMs = observedTime(existing);
|
|
66
|
+
if (existingMs > candidateMs && typeof existing === "string")
|
|
67
|
+
return existing;
|
|
68
|
+
return candidate;
|
|
69
|
+
}
|
|
70
|
+
function rowTerminalRank(row) {
|
|
71
|
+
return row.classification === "terminal" || row.state === "task_result" || row.state === "invocation_failed" || row.state === "no_output" || row.state === "task_failed" ? 1 : 0;
|
|
72
|
+
}
|
|
73
|
+
function rowRichness(row) {
|
|
74
|
+
return [row.taskId, row.parentSessionRef, row.taskSummary, row.completionStatus, row.outputKind]
|
|
75
|
+
.filter((value) => typeof value === "string" && value.length > 0).length + (row.usableForSynthesis === undefined ? 0 : 1);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Canonical row merge invariants:
|
|
79
|
+
* 1. Terminal-rank MUST be monotonic. Once a lane row reaches terminal
|
|
80
|
+
* classification (task_result / invocation_failed / no_output /
|
|
81
|
+
* task_failed), no later candidate may regress it to progressing_normal
|
|
82
|
+
* regardless of timestamp ordering.
|
|
83
|
+
* 2. Within the same terminal rank, the later `lastObservedAt` wins; ties
|
|
84
|
+
* break on row richness (more populated fields wins).
|
|
85
|
+
* 3. Merging NEVER mutates the input `existing` or `candidate` objects —
|
|
86
|
+
* every returned row is a fresh object built via spread, so callers may
|
|
87
|
+
* keep references to the originals without surprise. (Race-safe: a
|
|
88
|
+
* concurrent reader of the previous cache copy cannot observe a torn row.)
|
|
89
|
+
* 4. When the winning side is `existing`, its terminal-only fields
|
|
90
|
+
* (state, classification, progressPhase, completionStatus, outputKind,
|
|
91
|
+
* usableForSynthesis) are NEVER overwritten by undefined-bearing keys on
|
|
92
|
+
* the candidate.
|
|
93
|
+
*/
|
|
94
|
+
function choosePreferredRow(existing, candidate) {
|
|
95
|
+
if (existing === undefined)
|
|
96
|
+
return { ...candidate };
|
|
97
|
+
const existingRank = rowTerminalRank(existing);
|
|
98
|
+
const candidateRank = rowTerminalRank(candidate);
|
|
99
|
+
if (candidateRank > existingRank)
|
|
100
|
+
return { ...existing, ...candidate };
|
|
101
|
+
if (candidateRank < existingRank)
|
|
102
|
+
return { ...existing };
|
|
103
|
+
const existingTime = observedTime(existing.lastObservedAt);
|
|
104
|
+
const candidateTime = observedTime(candidate.lastObservedAt);
|
|
105
|
+
if (candidateTime > existingTime)
|
|
106
|
+
return { ...existing, ...candidate };
|
|
107
|
+
if (candidateTime < existingTime)
|
|
108
|
+
return { ...existing };
|
|
109
|
+
return rowRichness(candidate) >= rowRichness(existing) ? { ...existing, ...candidate } : { ...existing };
|
|
110
|
+
}
|
|
111
|
+
function choosePreferredWorkflow(existing, candidate) {
|
|
112
|
+
if (existing === undefined)
|
|
113
|
+
return candidate;
|
|
114
|
+
const existingTime = observedTime(existing.readyAt);
|
|
115
|
+
const candidateTime = observedTime(candidate.readyAt);
|
|
116
|
+
if (candidateTime > existingTime)
|
|
117
|
+
return { ...existing, ...candidate };
|
|
118
|
+
if (candidateTime < existingTime)
|
|
119
|
+
return existing;
|
|
120
|
+
return { ...existing, ...candidate };
|
|
121
|
+
}
|
|
122
|
+
function compactTaskSummary(value) {
|
|
123
|
+
if (value === undefined)
|
|
124
|
+
return undefined;
|
|
125
|
+
const firstSentence = value
|
|
126
|
+
.replace(/Respond with exactly[\s\S]*$/i, "")
|
|
127
|
+
.replace(/Return only[\s\S]*$/i, "")
|
|
128
|
+
.replace(/\s+/g, " ")
|
|
129
|
+
.trim();
|
|
130
|
+
const source = firstSentence.length > 0 ? firstSentence : value.replace(/\s+/g, " ").trim();
|
|
131
|
+
if (FORBIDDEN_SUMMARY_MARKERS.test(source))
|
|
132
|
+
return undefined;
|
|
133
|
+
const words = source.match(/[\p{L}\p{N}][\p{L}\p{N}_-]*/gu) ?? [];
|
|
134
|
+
const usefulWords = words.filter((word) => !GENERIC_TASK_SUMMARY_WORDS.has(word.toLocaleLowerCase()));
|
|
135
|
+
const labelWords = usefulWords.length > 0 ? usefulWords : words;
|
|
136
|
+
const joined = labelWords.slice(0, 4).join(" ");
|
|
137
|
+
const compact = (joined.length > 0 ? joined : source).replace(/[^\p{L}\p{N}_ -]/gu, "").trim();
|
|
138
|
+
return compact.length > 0 ? compact.slice(0, 30) : undefined;
|
|
139
|
+
}
|
|
140
|
+
function safeSummaryPreview(value) {
|
|
141
|
+
if (value === undefined)
|
|
142
|
+
return undefined;
|
|
143
|
+
const compact = value.replace(/\s+/g, " ").trim();
|
|
144
|
+
if (compact.length === 0 || FORBIDDEN_SUMMARY_MARKERS.test(compact))
|
|
145
|
+
return undefined;
|
|
146
|
+
return compact.length > 80 ? `${compact.slice(0, 79)}…` : compact;
|
|
147
|
+
}
|
|
148
|
+
function mergeRowsByWorkflowLane(input) {
|
|
149
|
+
// Invariant: merge key is (workflowId, laneId) only — NOT
|
|
150
|
+
// (parentSessionRef, workflowId, laneId). A lane row may legitimately arrive
|
|
151
|
+
// first with no `parent_session_ref` (e.g. a terminal `task_failed` without
|
|
152
|
+
// a paired `agent_task_context`) and later be enriched once lifecycle/
|
|
153
|
+
// context records that DO carry `parent_session_ref` arrive. Keying on
|
|
154
|
+
// `parentSessionRef ?? "global"` would split that single logical lane into
|
|
155
|
+
// two distinct sidebar rows, violating the "one row per lane" guarantee.
|
|
156
|
+
const merged = new Map();
|
|
157
|
+
if (Array.isArray(input.existing)) {
|
|
158
|
+
for (const row of input.existing) {
|
|
159
|
+
if (!isRecord(row))
|
|
160
|
+
continue;
|
|
161
|
+
const workflowId = getString(row, "workflowId");
|
|
162
|
+
const laneId = getString(row, "laneId");
|
|
163
|
+
if (workflowId === undefined || laneId === undefined)
|
|
164
|
+
continue;
|
|
165
|
+
merged.set(`${workflowId}\u0000${laneId}`, row);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
for (const row of input.rows) {
|
|
169
|
+
const key = `${row.workflowId}\u0000${row.laneId}`;
|
|
170
|
+
merged.set(key, choosePreferredRow(merged.get(key), row));
|
|
171
|
+
}
|
|
172
|
+
return [...merged.values()]
|
|
173
|
+
.sort((left, right) => observedTime(right.lastObservedAt) - observedTime(left.lastObservedAt))
|
|
174
|
+
.slice(0, SUBTASK_ACTIVITY_CACHE_ROW_LIMIT);
|
|
175
|
+
}
|
|
176
|
+
function mergeReadyWorkflows(input) {
|
|
177
|
+
const merged = new Map();
|
|
178
|
+
if (Array.isArray(input.existing)) {
|
|
179
|
+
for (const workflow of input.existing) {
|
|
180
|
+
if (!isRecord(workflow))
|
|
181
|
+
continue;
|
|
182
|
+
const workflowId = getString(workflow, "workflowId");
|
|
183
|
+
if (workflowId === undefined || workflowId === input.workflowId)
|
|
184
|
+
continue;
|
|
185
|
+
const parentSessionRef = getString(workflow, "parentSessionRef") ?? "global";
|
|
186
|
+
merged.set(`${parentSessionRef}\u0000${workflowId}`, workflow);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (input.workflow !== undefined) {
|
|
190
|
+
const key = `${input.parentSessionRef ?? "global"}\u0000${input.workflowId}`;
|
|
191
|
+
merged.set(key, choosePreferredWorkflow(merged.get(key), input.workflow));
|
|
192
|
+
}
|
|
193
|
+
return [...merged.values()]
|
|
194
|
+
.sort((left, right) => observedTime(right.readyAt) - observedTime(left.readyAt))
|
|
195
|
+
.slice(0, 8);
|
|
196
|
+
}
|
|
197
|
+
function mergeSynthesisRows(input) {
|
|
198
|
+
const merged = new Map();
|
|
199
|
+
if (Array.isArray(input.existing)) {
|
|
200
|
+
for (const row of input.existing) {
|
|
201
|
+
if (!isRecord(row))
|
|
202
|
+
continue;
|
|
203
|
+
const workflowId = getString(row, "workflowId");
|
|
204
|
+
const synthesisId = getString(row, "synthesisId");
|
|
205
|
+
const summaryPreview = getString(row, "summaryPreview");
|
|
206
|
+
const observedAt = getString(row, "observedAt");
|
|
207
|
+
if (workflowId === undefined || synthesisId === undefined || summaryPreview === undefined || observedAt === undefined)
|
|
208
|
+
continue;
|
|
209
|
+
merged.set(workflowId, {
|
|
210
|
+
workflowId,
|
|
211
|
+
synthesisId,
|
|
212
|
+
tasksSummarized: typeof row.tasksSummarized === "number" ? row.tasksSummarized : 0,
|
|
213
|
+
conflictDetected: row.conflictDetected === true,
|
|
214
|
+
summaryPreview,
|
|
215
|
+
observedAt,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (input.row !== undefined) {
|
|
220
|
+
const existing = merged.get(input.workflowId);
|
|
221
|
+
if (existing !== undefined && observedTime(input.row.observedAt) < observedTime(existing.observedAt)) {
|
|
222
|
+
merged.set(input.workflowId, existing);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
merged.set(input.workflowId, input.row);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return [...merged.values()]
|
|
229
|
+
.sort((left, right) => observedTime(right.observedAt) - observedTime(left.observedAt))
|
|
230
|
+
.slice(0, 5);
|
|
231
|
+
}
|
|
232
|
+
export function refreshFlowDeskCompletionUiCachesV1(input) {
|
|
233
|
+
try {
|
|
234
|
+
const requestedObservedAt = input.observedAt ?? new Date().toISOString();
|
|
235
|
+
const reload = reloadFlowDeskSessionEvidenceV1({ rootDir: input.rootDir, workflowId: input.workflowId });
|
|
236
|
+
if (!reload.ok)
|
|
237
|
+
return;
|
|
238
|
+
const uiDir = join(input.rootDir, ".flowdesk", "ui");
|
|
239
|
+
mkdirSync(uiDir, { recursive: true });
|
|
240
|
+
const sidebarCachePath = join(uiDir, "subtask-activity-sidebar.json");
|
|
241
|
+
const autoNextCachePath = join(uiDir, "auto-next-ready.json");
|
|
242
|
+
const synthesisCachePath = join(uiDir, "latest-synthesis.json");
|
|
243
|
+
const existingSidebar = readJsonRecord(sidebarCachePath);
|
|
244
|
+
const existingAutoNext = readJsonRecord(autoNextCachePath);
|
|
245
|
+
const existingSynthesis = readJsonRecord(synthesisCachePath);
|
|
246
|
+
// Invariant: the file-level `observed_at` MUST be monotonic across every
|
|
247
|
+
// previously persisted cache file. A back-dated/duplicate terminal event
|
|
248
|
+
// (e.g. an older `task_failed` arriving after a newer one was already
|
|
249
|
+
// merged) must never regress the visible `observed_at`. We fold in
|
|
250
|
+
// sidebar, auto-next, AND synthesis observed_at so any one of them can
|
|
251
|
+
// pin monotonicity.
|
|
252
|
+
const observedAt = monotonicObservedAt(monotonicObservedAt(monotonicObservedAt(requestedObservedAt, existingSidebar?.observed_at), existingAutoNext?.observed_at), existingSynthesis?.observed_at);
|
|
253
|
+
const resultByLane = latestByLane(reload.entries, "task_result");
|
|
254
|
+
const failedByLane = latestByLane(reload.entries, "task_failed");
|
|
255
|
+
const contextByLane = latestByLane(reload.entries, "agent_task_context");
|
|
256
|
+
// Some lanes reach a terminal state via lane_lifecycle alone (e.g. reviewer
|
|
257
|
+
// execution bridge writes only lane_lifecycle=invocation_failed without a
|
|
258
|
+
// task_failed companion). Pick the latest terminal lifecycle per lane so the
|
|
259
|
+
// UI cache can promote those rows to terminal/failed instead of leaving them
|
|
260
|
+
// stale at progressing_normal/running.
|
|
261
|
+
const TERMINAL_LIFECYCLE_STATES = new Set(["complete", "invocation_failed", "no_output", "task_failed", "incomplete", "aborted", "timeout"]);
|
|
262
|
+
const terminalLifecycleByLane = new Map();
|
|
263
|
+
for (const entry of reload.entries) {
|
|
264
|
+
if (entry.evidenceClass !== "lane_lifecycle")
|
|
265
|
+
continue;
|
|
266
|
+
const laneId = getString(entry.record, "lane_id");
|
|
267
|
+
if (laneId === undefined)
|
|
268
|
+
continue;
|
|
269
|
+
const stateValue = entry.record.state;
|
|
270
|
+
if (typeof stateValue !== "string" || !TERMINAL_LIFECYCLE_STATES.has(stateValue))
|
|
271
|
+
continue;
|
|
272
|
+
const previous = terminalLifecycleByLane.get(laneId);
|
|
273
|
+
if (previous === undefined || observedTime(getString(previous.record, "updated_at") ?? getString(previous.record, "created_at")) <= observedTime(getString(entry.record, "updated_at") ?? getString(entry.record, "created_at"))) {
|
|
274
|
+
terminalLifecycleByLane.set(laneId, entry);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const synthesisEntries = reload.entries.filter((entry) => entry.evidenceClass === "workflow_synthesis_result");
|
|
278
|
+
const latestSynthesisEntry = synthesisEntries[synthesisEntries.length - 1];
|
|
279
|
+
const synthesisAlreadyRecorded = latestSynthesisEntry !== undefined;
|
|
280
|
+
const laneIds = new Set([...contextByLane.keys(), ...resultByLane.keys(), ...failedByLane.keys(), ...terminalLifecycleByLane.keys()]);
|
|
281
|
+
const rows = [...laneIds].map((laneId) => {
|
|
282
|
+
const result = resultByLane.get(laneId)?.record;
|
|
283
|
+
const failed = failedByLane.get(laneId)?.record;
|
|
284
|
+
const context = contextByLane.get(laneId)?.record;
|
|
285
|
+
const lifecycle = terminalLifecycleByLane.get(laneId)?.record;
|
|
286
|
+
const lifecycleState = typeof lifecycle?.state === "string" ? lifecycle.state : undefined;
|
|
287
|
+
// A lane is terminal-without-success when lifecycle reports a non-complete
|
|
288
|
+
// terminal state but no task_result and no task_failed evidence exists.
|
|
289
|
+
const lifecycleTerminalFailureOnly = result === undefined && failed === undefined && lifecycleState !== undefined && lifecycleState !== "complete";
|
|
290
|
+
const taskId = getString(result ?? failed ?? context ?? lifecycle ?? {}, "task_id");
|
|
291
|
+
const parentSessionRef = getString(context ?? lifecycle ?? {}, "parent_session_ref");
|
|
292
|
+
const taskSummary = compactTaskSummary(getString(context ?? {}, "prompt_text"));
|
|
293
|
+
const state = result !== undefined
|
|
294
|
+
? "task_result"
|
|
295
|
+
: failed !== undefined
|
|
296
|
+
? "invocation_failed"
|
|
297
|
+
: lifecycleTerminalFailureOnly
|
|
298
|
+
? lifecycleState
|
|
299
|
+
: "running";
|
|
300
|
+
const isTerminal = result !== undefined || failed !== undefined || lifecycleTerminalFailureOnly;
|
|
301
|
+
const isFailedLike = failed !== undefined || lifecycleTerminalFailureOnly;
|
|
302
|
+
const actions = isFailedLike
|
|
303
|
+
? ["/flowdesk-status", "/flowdesk-retry", "/flowdesk-resume", "/flowdesk-abort", "/flowdesk-export-debug"]
|
|
304
|
+
: ["/flowdesk-status", "/flowdesk-export-debug"];
|
|
305
|
+
return {
|
|
306
|
+
workflowId: input.workflowId,
|
|
307
|
+
laneId,
|
|
308
|
+
...(taskId === undefined ? {} : { taskId }),
|
|
309
|
+
...(parentSessionRef === undefined ? {} : { parentSessionRef }),
|
|
310
|
+
state,
|
|
311
|
+
classification: isTerminal ? "terminal" : "progressing_normal",
|
|
312
|
+
progressPhase: result !== undefined ? "finalizing" : isFailedLike ? "failed" : "waiting",
|
|
313
|
+
lastObservedAt: getString(result ?? failed ?? lifecycle ?? context ?? {}, "updated_at") ?? getString(result ?? failed ?? lifecycle ?? context ?? {}, "created_at") ?? observedAt,
|
|
314
|
+
...(getString(result ?? {}, "completion_status") === undefined ? {} : { completionStatus: getString(result ?? {}, "completion_status") }),
|
|
315
|
+
...(getString(result ?? {}, "output_kind") === undefined ? {} : { outputKind: getString(result ?? {}, "output_kind") }),
|
|
316
|
+
...(typeof result?.usable_for_synthesis === "boolean" ? { usableForSynthesis: result.usable_for_synthesis } : {}),
|
|
317
|
+
...(taskSummary === undefined ? {} : { taskSummary }),
|
|
318
|
+
recoveryActionRefs: actions,
|
|
319
|
+
statusCommandRef: "/flowdesk-status",
|
|
320
|
+
debugCommandRef: "/flowdesk-export-debug",
|
|
321
|
+
};
|
|
322
|
+
});
|
|
323
|
+
const sidebarRows = mergeRowsByWorkflowLane({
|
|
324
|
+
existing: existingSidebar?.rows,
|
|
325
|
+
workflowId: input.workflowId,
|
|
326
|
+
rows,
|
|
327
|
+
});
|
|
328
|
+
writeFileSync(join(uiDir, "subtask-activity-sidebar.json"), `${JSON.stringify({
|
|
329
|
+
schema_version: "flowdesk.subtask_activity_sidebar_cache.v1",
|
|
330
|
+
observed_at: observedAt,
|
|
331
|
+
expires_at: new Date(Date.parse(observedAt) + 120_000).toISOString(),
|
|
332
|
+
rows: sidebarRows,
|
|
333
|
+
authority: { displayOnly: true, realOpenCodeDispatch: false, providerCall: false, runtimeExecution: false, fallbackAuthority: false, hardCancelOrNoReplyAuthority: false },
|
|
334
|
+
}, null, 2)}\n`, "utf8");
|
|
335
|
+
const ready = !synthesisAlreadyRecorded && rows.length > 0 && rows.every((row) => row.state === "task_result" && row.completionStatus !== "partial" && row.usableForSynthesis !== false);
|
|
336
|
+
const readyAt = rows.reduce((max, row) => Math.max(max, observedTime(row.lastObservedAt)), 0);
|
|
337
|
+
const parentSessionRefs = [...new Set(rows.map((row) => row.parentSessionRef).filter((value) => typeof value === "string" && value.length > 0))];
|
|
338
|
+
const parentSessionRef = parentSessionRefs.length === 1 ? parentSessionRefs[0] : undefined;
|
|
339
|
+
const readyWorkflow = ready ? {
|
|
340
|
+
workflowId: input.workflowId,
|
|
341
|
+
...(parentSessionRef === undefined ? {} : { parentSessionRef }),
|
|
342
|
+
readyAt: Number.isFinite(readyAt) && readyAt > 0 ? new Date(readyAt).toISOString() : observedAt,
|
|
343
|
+
laneProgressAggregate: { expected: rows.length, terminal: rows.length, taskResult: rows.length, failed: 0, awaitingPermission: 0, normalCompleted: rows.length, autoNextStepEligible: true, nextActionAvailable: true, nextActionKind: "synthesis", nextActionRefs: ["/flowdesk-status", "/flowdesk-export-debug"] },
|
|
344
|
+
taskResultRefs: rows.map((row) => row.taskId ?? row.laneId).slice(0, 32),
|
|
345
|
+
taskSummaries: rows.map((row) => row.taskSummary).filter((value) => typeof value === "string" && value.length > 0).slice(0, 3),
|
|
346
|
+
nextActionKind: "synthesis",
|
|
347
|
+
nextActionRefs: ["/flowdesk-status", "/flowdesk-export-debug"],
|
|
348
|
+
} : undefined;
|
|
349
|
+
const readyWorkflows = mergeReadyWorkflows({
|
|
350
|
+
existing: existingAutoNext?.workflows,
|
|
351
|
+
workflowId: input.workflowId,
|
|
352
|
+
parentSessionRef,
|
|
353
|
+
workflow: readyWorkflow,
|
|
354
|
+
});
|
|
355
|
+
writeFileSync(join(uiDir, "auto-next-ready.json"), `${JSON.stringify({
|
|
356
|
+
schema_version: "flowdesk.auto_next_ready_cache.v1",
|
|
357
|
+
observed_at: observedAt,
|
|
358
|
+
expires_at: new Date(Date.parse(observedAt) + 120_000).toISOString(),
|
|
359
|
+
workflows: readyWorkflows,
|
|
360
|
+
authority: { displayOnly: true, realOpenCodeDispatch: false, providerCall: false, runtimeExecution: false, fallbackAuthority: false, hardCancelOrNoReplyAuthority: false },
|
|
361
|
+
}, null, 2)}\n`, "utf8");
|
|
362
|
+
const synthesisRecord = latestSynthesisEntry?.record;
|
|
363
|
+
const synthesisId = synthesisRecord === undefined ? undefined : getString(synthesisRecord, "synthesis_id") ?? latestSynthesisEntry?.evidenceId;
|
|
364
|
+
const summaryPreview = synthesisRecord === undefined ? undefined : safeSummaryPreview(getString(synthesisRecord, "synthesis_summary"));
|
|
365
|
+
const synthesisRow = synthesisRecord !== undefined && synthesisId !== undefined && summaryPreview !== undefined ? {
|
|
366
|
+
workflowId: input.workflowId,
|
|
367
|
+
synthesisId,
|
|
368
|
+
tasksSummarized: typeof synthesisRecord.tasks_summarized === "number" ? synthesisRecord.tasks_summarized : 0,
|
|
369
|
+
conflictDetected: synthesisRecord.conflict_detected === true,
|
|
370
|
+
summaryPreview,
|
|
371
|
+
observedAt,
|
|
372
|
+
} : undefined;
|
|
373
|
+
const synthesisRows = mergeSynthesisRows({
|
|
374
|
+
existing: existingSynthesis?.syntheses,
|
|
375
|
+
workflowId: input.workflowId,
|
|
376
|
+
row: synthesisRow,
|
|
377
|
+
});
|
|
378
|
+
writeFileSync(synthesisCachePath, `${JSON.stringify({
|
|
379
|
+
schema_version: "flowdesk.latest_synthesis_cache.v1",
|
|
380
|
+
observed_at: observedAt,
|
|
381
|
+
expires_at: new Date(Date.parse(observedAt) + 120_000).toISOString(),
|
|
382
|
+
syntheses: synthesisRows,
|
|
383
|
+
authority: { displayOnly: true, realOpenCodeDispatch: false, providerCall: false, runtimeExecution: false, actualLaneLaunch: false, fallbackAuthority: false, hardCancelOrNoReplyAuthority: false },
|
|
384
|
+
}, null, 2)}\n`, "utf8");
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
// Display cache refresh is best-effort only.
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=completion-ui-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion-ui-cache.js","sourceRoot":"","sources":["../src/completion-ui-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface FlowDeskEventHookObservationResultV1 {
|
|
2
|
+
matched: boolean;
|
|
3
|
+
eventType?: string;
|
|
4
|
+
sessionId?: string;
|
|
5
|
+
workflowId?: string;
|
|
6
|
+
laneId?: string;
|
|
7
|
+
taskId?: string;
|
|
8
|
+
evidenceWritten: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function observeFlowDeskOpenCodeEventV1(input: {
|
|
11
|
+
rootDir: string;
|
|
12
|
+
event: unknown;
|
|
13
|
+
}): Promise<FlowDeskEventHookObservationResultV1>;
|
|
14
|
+
//# sourceMappingURL=event-hook-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-hook-observer.d.ts","sourceRoot":"","sources":["../src/event-hook-observer.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,oCAAoC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACxB;AAsOD,wBAAsB,8BAA8B,CAAC,KAAK,EAAE;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAwBhD"}
|