@flowdesk/opencode-plugin 0.1.12 → 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 (98) 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 +24 -0
  7. package/dist/agent-task-runner.d.ts.map +1 -1
  8. package/dist/agent-task-runner.js +536 -61
  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/controlled-write-tool.d.ts +49 -0
  19. package/dist/controlled-write-tool.d.ts.map +1 -0
  20. package/dist/controlled-write-tool.js +296 -0
  21. package/dist/controlled-write-tool.js.map +1 -0
  22. package/dist/event-hook-observer.d.ts +14 -0
  23. package/dist/event-hook-observer.d.ts.map +1 -0
  24. package/dist/event-hook-observer.js +193 -0
  25. package/dist/event-hook-observer.js.map +1 -0
  26. package/dist/managed-dispatch-adapter.d.ts +1 -0
  27. package/dist/managed-dispatch-adapter.d.ts.map +1 -1
  28. package/dist/managed-dispatch-adapter.js +100 -29
  29. package/dist/managed-dispatch-adapter.js.map +1 -1
  30. package/dist/model-selection-engine.d.ts +47 -0
  31. package/dist/model-selection-engine.d.ts.map +1 -0
  32. package/dist/model-selection-engine.js +175 -0
  33. package/dist/model-selection-engine.js.map +1 -0
  34. package/dist/provider-usage-live-tool.d.ts +27 -0
  35. package/dist/provider-usage-live-tool.d.ts.map +1 -1
  36. package/dist/provider-usage-live-tool.js +443 -4
  37. package/dist/provider-usage-live-tool.js.map +1 -1
  38. package/dist/quick-reviewer-run.d.ts +3 -0
  39. package/dist/quick-reviewer-run.d.ts.map +1 -1
  40. package/dist/quick-reviewer-run.js +20 -8
  41. package/dist/quick-reviewer-run.js.map +1 -1
  42. package/dist/runtime-reviewer-execution-bridge.d.ts +21 -0
  43. package/dist/runtime-reviewer-execution-bridge.d.ts.map +1 -1
  44. package/dist/runtime-reviewer-execution-bridge.js +238 -0
  45. package/dist/runtime-reviewer-execution-bridge.js.map +1 -1
  46. package/dist/server.d.ts +60 -1
  47. package/dist/server.d.ts.map +1 -1
  48. package/dist/server.js +800 -41
  49. package/dist/server.js.map +1 -1
  50. package/dist/stall-recovery.d.ts +60 -0
  51. package/dist/stall-recovery.d.ts.map +1 -1
  52. package/dist/stall-recovery.js +763 -11
  53. package/dist/stall-recovery.js.map +1 -1
  54. package/dist/status-live-tool.d.ts +81 -0
  55. package/dist/status-live-tool.d.ts.map +1 -1
  56. package/dist/status-live-tool.js +620 -38
  57. package/dist/status-live-tool.js.map +1 -1
  58. package/dist/tui-subtask-activity.d.ts +69 -0
  59. package/dist/tui-subtask-activity.d.ts.map +1 -0
  60. package/dist/tui-subtask-activity.js +266 -0
  61. package/dist/tui-subtask-activity.js.map +1 -0
  62. package/dist/tui-usage-snapshot.d.ts +44 -0
  63. package/dist/tui-usage-snapshot.d.ts.map +1 -0
  64. package/dist/tui-usage-snapshot.js +397 -0
  65. package/dist/tui-usage-snapshot.js.map +1 -0
  66. package/dist/tui.d.ts +7 -0
  67. package/dist/tui.d.ts.map +1 -0
  68. package/dist/tui.js +134 -0
  69. package/dist/tui.js.map +1 -0
  70. package/dist/workflow-assign-tool.d.ts +23 -0
  71. package/dist/workflow-assign-tool.d.ts.map +1 -0
  72. package/dist/workflow-assign-tool.js +117 -0
  73. package/dist/workflow-assign-tool.js.map +1 -0
  74. package/dist/workflow-author-tool.d.ts +29 -0
  75. package/dist/workflow-author-tool.d.ts.map +1 -0
  76. package/dist/workflow-author-tool.js +227 -0
  77. package/dist/workflow-author-tool.js.map +1 -0
  78. package/dist/workflow-dispatch-plan-tool.d.ts +47 -0
  79. package/dist/workflow-dispatch-plan-tool.d.ts.map +1 -0
  80. package/dist/workflow-dispatch-plan-tool.js +251 -0
  81. package/dist/workflow-dispatch-plan-tool.js.map +1 -0
  82. package/dist/workflow-dispatch-tool.d.ts +56 -0
  83. package/dist/workflow-dispatch-tool.d.ts.map +1 -0
  84. package/dist/workflow-dispatch-tool.js +306 -0
  85. package/dist/workflow-dispatch-tool.js.map +1 -0
  86. package/dist/workflow-orchestrator.d.ts +31 -0
  87. package/dist/workflow-orchestrator.d.ts.map +1 -0
  88. package/dist/workflow-orchestrator.js +160 -0
  89. package/dist/workflow-orchestrator.js.map +1 -0
  90. package/dist/workflow-scheduler.d.ts +19 -0
  91. package/dist/workflow-scheduler.d.ts.map +1 -0
  92. package/dist/workflow-scheduler.js +45 -0
  93. package/dist/workflow-scheduler.js.map +1 -0
  94. package/dist/workflow-synthesis-tool.d.ts +31 -0
  95. package/dist/workflow-synthesis-tool.d.ts.map +1 -0
  96. package/dist/workflow-synthesis-tool.js +194 -0
  97. package/dist/workflow-synthesis-tool.js.map +1 -0
  98. package/package.json +10 -2
@@ -0,0 +1,296 @@
1
+ import { createHash } from "node:crypto";
2
+ import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
+ import { dirname, resolve, sep } from "node:path";
4
+ import { applyFlowDeskSessionEvidenceWriteIntentsV1, prepareFlowDeskSessionEvidenceWriteIntentV1, reloadFlowDeskSessionEvidenceV1, } from "@flowdesk/core";
5
+ const maxReplacementTextLength = 200_000;
6
+ function sha256Ref(content) {
7
+ return `sha256-${createHash("sha256").update(content).digest("hex")}`;
8
+ }
9
+ function safeNextActions() {
10
+ return ["/flowdesk-status", "/flowdesk-export-debug", "/flowdesk-doctor"];
11
+ }
12
+ function authority(input) {
13
+ return {
14
+ realOpenCodeDispatch: false,
15
+ providerCall: false,
16
+ runtimeExecution: false,
17
+ actualLaneLaunch: false,
18
+ fallbackAuthority: false,
19
+ hardCancelOrNoReplyAuthority: false,
20
+ toolAuthority: false,
21
+ dispatchAuthorityEnabled: false,
22
+ defaultRelease1WriteAuthority: false,
23
+ controlledExternalWriteAuthorized: input.writeAuthorized,
24
+ developerModeAcknowledged: input.developerModeAcknowledged,
25
+ allowControlledWrite: input.allowControlledWrite,
26
+ ledgerEvidenceReloaded: input.ledgerEvidenceReloaded,
27
+ };
28
+ }
29
+ function blocked(input) {
30
+ return {
31
+ status: "blocked_before_controlled_write",
32
+ ...(input.request.workflowId === undefined ? {} : { workflowId: input.request.workflowId }),
33
+ ...(input.request.targetFilePath === undefined ? {} : { targetFilePath: input.request.targetFilePath }),
34
+ redactedBlockReason: input.reason,
35
+ summaryForUser: `FlowDesk controlled write blocked: ${input.reason}.`,
36
+ safeNextActions: safeNextActions(),
37
+ authority: authority({
38
+ developerModeAcknowledged: input.request.developerModeAcknowledged === true,
39
+ allowControlledWrite: input.request.allowControlledWrite === true,
40
+ ledgerEvidenceReloaded: input.ledgerEvidenceReloaded === true,
41
+ writeAuthorized: false,
42
+ }),
43
+ };
44
+ }
45
+ function isRecord(value) {
46
+ return typeof value === "object" && value !== null && !Array.isArray(value);
47
+ }
48
+ function normalizeRequest(value) {
49
+ if (!isRecord(value))
50
+ return {};
51
+ return {
52
+ ...(typeof value.workflowId === "string" ? { workflowId: value.workflowId } : {}),
53
+ ...(typeof value.targetFilePath === "string" ? { targetFilePath: value.targetFilePath } : {}),
54
+ ...(typeof value.expectedSha256 === "string" ? { expectedSha256: value.expectedSha256 } : {}),
55
+ ...(typeof value.expectedContentSha256 === "string" ? { expectedContentSha256: value.expectedContentSha256 } : {}),
56
+ allowMissingExpectedHashForDevMode: value.allowMissingExpectedHashForDevMode === true,
57
+ ...(typeof value.replacementText === "string" ? { replacementText: value.replacementText } : {}),
58
+ ...(typeof value.reasonSummary === "string" ? { reasonSummary: value.reasonSummary } : {}),
59
+ developerModeAcknowledged: value.developerModeAcknowledged === true,
60
+ ...(typeof value.userApprovalRef === "string" ? { userApprovalRef: value.userApprovalRef } : {}),
61
+ allowControlledWrite: value.allowControlledWrite === true,
62
+ };
63
+ }
64
+ function stableToken(value, fallback) {
65
+ const token = value.replaceAll(/[^A-Za-z0-9_.:-]/g, "-").slice(0, 96);
66
+ return token.length >= 3 ? token : fallback;
67
+ }
68
+ function validateRelativeTarget(value) {
69
+ if (typeof value !== "string" || value.trim().length === 0)
70
+ return "targetFilePath is required";
71
+ if (value.length > 500)
72
+ return "targetFilePath exceeds max length 500";
73
+ if (value.startsWith("/") ||
74
+ /^[A-Za-z]:[\\/]/.test(value) ||
75
+ value.startsWith("~") ||
76
+ value.includes("\\") ||
77
+ value.includes("//") ||
78
+ value === "." ||
79
+ value === ".." ||
80
+ value.startsWith("../") ||
81
+ value.includes("/../") ||
82
+ value.endsWith("/..") ||
83
+ value.startsWith("./") ||
84
+ value.includes("/./") ||
85
+ value.endsWith("/"))
86
+ return "targetFilePath must be a relative workspace file path without traversal";
87
+ return undefined;
88
+ }
89
+ function validateText(value, label, maxLength) {
90
+ if (typeof value !== "string" || value.length === 0)
91
+ return `${label} is required`;
92
+ if (value.length > maxLength)
93
+ return `${label} exceeds max length ${maxLength}`;
94
+ if (value.includes("\u0000"))
95
+ return `${label} contains a binary NUL marker`;
96
+ if (/\b(system prompt|developer message|transcript|provider payload|provider response|api[_-]?key|bearer\s+[A-Za-z0-9]|token[:=]|credential|secret)\b/i.test(value))
97
+ return `${label} contains forbidden raw or credential-shaped marker`;
98
+ return undefined;
99
+ }
100
+ function safeJoinUnderRoot(rootDir, relativePath) {
101
+ const root = realpathSync.native(resolve(rootDir));
102
+ const target = resolve(root, relativePath);
103
+ const rootPrefix = root.endsWith(sep) ? root : `${root}${sep}`;
104
+ if (target !== root && !target.startsWith(rootPrefix))
105
+ throw new Error("controlled write target escapes workspace root");
106
+ return target;
107
+ }
108
+ function ensureNoSymlinkEscape(rootDir, relativePath) {
109
+ const root = resolve(rootDir);
110
+ if (!existsSync(root))
111
+ throw new Error("workspace root does not exist");
112
+ if (lstatSync(root).isSymbolicLink())
113
+ throw new Error("workspace root must not be a symlink");
114
+ const parts = dirname(relativePath).split("/").filter(Boolean);
115
+ let current = root;
116
+ for (const part of parts) {
117
+ current = resolve(current, part);
118
+ if (existsSync(current) && lstatSync(current).isSymbolicLink())
119
+ throw new Error("controlled write parent directory must not be a symlink");
120
+ }
121
+ }
122
+ function readUtf8IfSafe(target) {
123
+ if (!existsSync(target))
124
+ return { ok: false, reason: "target file does not exist" };
125
+ const stat = lstatSync(target);
126
+ if (stat.isSymbolicLink())
127
+ return { ok: false, reason: "target file must not be a symlink" };
128
+ if (!stat.isFile())
129
+ return { ok: false, reason: "target path must be a regular file" };
130
+ if (stat.size > maxReplacementTextLength)
131
+ return { ok: false, reason: "target file exceeds controlled write size limit" };
132
+ const bytes = readFileSync(target);
133
+ if (bytes.includes(0))
134
+ return { ok: false, reason: "target file appears binary" };
135
+ return { ok: true, content: bytes.toString("utf8"), mode: stat.mode };
136
+ }
137
+ function rollbackTarget(target, previousContent, mode) {
138
+ const rollbackTemp = `${target}.tmp-flowdesk-controlled-write-rollback-${process.pid}`;
139
+ writeFileSync(rollbackTemp, previousContent, "utf8");
140
+ if (mode !== undefined)
141
+ chmodSync(rollbackTemp, mode);
142
+ renameSync(rollbackTemp, target);
143
+ }
144
+ export function executeFlowDeskControlledWriteApplyToolV1(input) {
145
+ const request = input.request ?? normalizeRequest(input.rawInput);
146
+ if (typeof input.config.durableStateRoot !== "string" || input.config.durableStateRoot.trim().length === 0)
147
+ return blocked({ request, reason: "controlled write requires a durable state root directory" });
148
+ if (typeof input.config.workspaceRoot !== "string" || input.config.workspaceRoot.trim().length === 0)
149
+ return blocked({ request, reason: "controlled write requires a workspace root directory" });
150
+ if (request.developerModeAcknowledged !== true)
151
+ return blocked({ request, reason: "developerModeAcknowledged=true is required" });
152
+ if (request.allowControlledWrite !== true)
153
+ return blocked({ request, reason: "allowControlledWrite=true is required" });
154
+ if (typeof request.userApprovalRef !== "string" || request.userApprovalRef.trim().length === 0 || request.userApprovalRef.length > 128)
155
+ return blocked({ request, reason: "bounded userApprovalRef is required" });
156
+ if (typeof request.workflowId !== "string" || request.workflowId.trim().length === 0)
157
+ return blocked({ request, reason: "workflowId is required" });
158
+ const targetError = validateRelativeTarget(request.targetFilePath);
159
+ if (targetError !== undefined)
160
+ return blocked({ request, reason: targetError });
161
+ const replacementError = validateText(request.replacementText, "replacementText", maxReplacementTextLength);
162
+ if (replacementError !== undefined)
163
+ return blocked({ request, reason: replacementError });
164
+ const reasonError = validateText(request.reasonSummary, "reasonSummary", 500);
165
+ if (reasonError !== undefined)
166
+ return blocked({ request, reason: reasonError });
167
+ const expectedHash = request.expectedContentSha256 ?? request.expectedSha256;
168
+ if (expectedHash === undefined && request.allowMissingExpectedHashForDevMode !== true)
169
+ return blocked({ request, reason: "expectedSha256 or expectedContentSha256 is required unless allowMissingExpectedHashForDevMode=true" });
170
+ if (expectedHash !== undefined && !/^sha256-[a-f0-9]{64}$/.test(expectedHash))
171
+ return blocked({ request, reason: "expected content hash must be sha256-<64 lowercase hex>" });
172
+ const targetFilePath = request.targetFilePath;
173
+ const replacementText = request.replacementText;
174
+ const workflowId = stableToken(request.workflowId, "workflow-controlled-write");
175
+ const observed = input.now ? input.now() : new Date();
176
+ const stamp = observed.toISOString().replaceAll(/[-:.]/g, "").replace("Z", "Z");
177
+ const ledgerEntryId = stableToken(`controlled-write-${workflowId}-${stamp}`, `controlled-write-${stamp}`);
178
+ let target;
179
+ try {
180
+ ensureNoSymlinkEscape(input.config.workspaceRoot, targetFilePath);
181
+ target = safeJoinUnderRoot(input.config.workspaceRoot, targetFilePath);
182
+ }
183
+ catch (error) {
184
+ return blocked({ request, reason: error instanceof Error ? error.message : "controlled write path resolution failed" });
185
+ }
186
+ const current = readUtf8IfSafe(target);
187
+ if (!current.ok)
188
+ return blocked({ request, reason: current.reason });
189
+ const previousContentSha256Ref = sha256Ref(current.content);
190
+ if (expectedHash !== undefined && previousContentSha256Ref !== expectedHash)
191
+ return blocked({ request, reason: "expected content hash mismatch" });
192
+ const replacementContentSha256Ref = sha256Ref(replacementText);
193
+ const record = {
194
+ schema_version: "flowdesk.controlled_workspace_file_write.v1",
195
+ ledger_entry_id: ledgerEntryId,
196
+ workflow_id: workflowId,
197
+ user_approval_ref: request.userApprovalRef,
198
+ target_file_path: targetFilePath,
199
+ ...(expectedHash === undefined ? {} : { expected_content_sha256_ref: expectedHash }),
200
+ previous_content_sha256_ref: previousContentSha256Ref,
201
+ replacement_content_sha256_ref: replacementContentSha256Ref,
202
+ reason_summary: request.reasonSummary.trim().slice(0, 500),
203
+ materialized_at: observed.toISOString(),
204
+ dev_beta_explicit_opt_in: true,
205
+ developer_mode_acknowledged: true,
206
+ allow_controlled_write: true,
207
+ local_only: true,
208
+ writeAttempted: true,
209
+ remoteWriteAttempted: false,
210
+ githubWriteAttempted: false,
211
+ connectorWriteAttempted: false,
212
+ storageWriteAttempted: false,
213
+ databaseWriteAttempted: false,
214
+ urlWriteAttempted: false,
215
+ rawPathWriteAttempted: false,
216
+ dispatch_authority_enabled: false,
217
+ realOpenCodeDispatch: false,
218
+ providerCall: false,
219
+ actualLaneLaunch: false,
220
+ runtimeExecution: false,
221
+ fallbackAuthority: false,
222
+ toolAuthority: false,
223
+ hardCancelOrNoReplyAuthority: false,
224
+ };
225
+ const prepared = prepareFlowDeskSessionEvidenceWriteIntentV1({
226
+ workflowId,
227
+ evidenceId: ledgerEntryId,
228
+ record,
229
+ });
230
+ if (!prepared.ok || prepared.writeIntent === undefined)
231
+ return blocked({ request, reason: prepared.errors.join(", ") || "controlled write ledger evidence is invalid" });
232
+ const preReload = reloadFlowDeskSessionEvidenceV1({ workflowId, rootDir: input.config.durableStateRoot });
233
+ if (!preReload.ok || preReload.blocked.length > 0)
234
+ return blocked({ request, reason: "controlled write pre-write evidence reload failed" });
235
+ const temp = `${target}.tmp-flowdesk-controlled-write-${process.pid}-${stamp}`;
236
+ try {
237
+ if (dirname(target) !== dirname(temp))
238
+ return blocked({ request, reason: "controlled write temp path must stay beside target" });
239
+ mkdirSync(dirname(target), { recursive: true });
240
+ writeFileSync(temp, replacementText, "utf8");
241
+ if (current.mode !== undefined)
242
+ chmodSync(temp, current.mode);
243
+ renameSync(temp, target);
244
+ const written = readFileSync(target, "utf8");
245
+ if (sha256Ref(written) !== replacementContentSha256Ref) {
246
+ rollbackTarget(target, current.content, current.mode);
247
+ return blocked({ request, reason: "controlled write replacement hash verification failed" });
248
+ }
249
+ const applied = applyFlowDeskSessionEvidenceWriteIntentsV1(input.config.durableStateRoot, [prepared.writeIntent]);
250
+ if (!applied.ok) {
251
+ rollbackTarget(target, current.content, current.mode);
252
+ return blocked({ request, reason: applied.errors.join(", ") || "controlled write ledger write failed" });
253
+ }
254
+ const reloaded = reloadFlowDeskSessionEvidenceV1({ workflowId, rootDir: input.config.durableStateRoot });
255
+ const ledgerReloaded = reloaded.ok &&
256
+ reloaded.blocked.length === 0 &&
257
+ reloaded.entries.some((entry) => entry.evidenceClass === "controlled_workspace_file_write" &&
258
+ entry.evidenceId === ledgerEntryId &&
259
+ entry.record.replacement_content_sha256_ref === replacementContentSha256Ref);
260
+ if (!ledgerReloaded) {
261
+ rollbackTarget(target, current.content, current.mode);
262
+ return blocked({ request, reason: "controlled write ledger reload failed" });
263
+ }
264
+ const finalStat = statSync(target);
265
+ if (!finalStat.isFile()) {
266
+ rollbackTarget(target, current.content, current.mode);
267
+ return blocked({ request, reason: "controlled write final target is not a regular file" });
268
+ }
269
+ return {
270
+ status: "controlled_write_applied",
271
+ workflowId,
272
+ targetFilePath,
273
+ ledgerEntryId,
274
+ previousContentSha256Ref,
275
+ replacementContentSha256Ref,
276
+ summaryForUser: `FlowDesk dev-mode controlled write applied to ${targetFilePath} and recorded durable ledger evidence ${ledgerEntryId}.`,
277
+ safeNextActions: safeNextActions(),
278
+ authority: authority({
279
+ developerModeAcknowledged: true,
280
+ allowControlledWrite: true,
281
+ ledgerEvidenceReloaded: true,
282
+ writeAuthorized: true,
283
+ }),
284
+ };
285
+ }
286
+ catch (error) {
287
+ try {
288
+ rmSync(temp, { force: true });
289
+ }
290
+ catch {
291
+ // Best-effort cleanup only; result remains blocked.
292
+ }
293
+ return blocked({ request, reason: error instanceof Error ? error.message : "controlled write failed" });
294
+ }
295
+ }
296
+ //# sourceMappingURL=controlled-write-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controlled-write-tool.js","sourceRoot":"","sources":["../src/controlled-write-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EACN,0CAA0C,EAC1C,2CAA2C,EAC3C,+BAA+B,GAE/B,MAAM,gBAAgB,CAAC;AA+CxB,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAEzC,SAAS,SAAS,CAAC,OAAwB;IAC1C,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,eAAe;IACvB,OAAO,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS,CAAC,KAKlB;IACA,OAAO;QACN,oBAAoB,EAAE,KAAK;QAC3B,YAAY,EAAE,KAAK;QACnB,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,KAAK;QACxB,4BAA4B,EAAE,KAAK;QACnC,aAAa,EAAE,KAAK;QACpB,wBAAwB,EAAE,KAAK;QAC/B,6BAA6B,EAAE,KAAK;QACpC,iCAAiC,EAAE,KAAK,CAAC,eAAe;QACxD,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;QAC1D,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;KACpD,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAIhB;IACA,OAAO;QACN,MAAM,EAAE,iCAAiC;QACzC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3F,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACvG,mBAAmB,EAAE,KAAK,CAAC,MAAM;QACjC,cAAc,EAAE,sCAAsC,KAAK,CAAC,MAAM,GAAG;QACrE,eAAe,EAAE,eAAe,EAAE;QAClC,SAAS,EAAE,SAAS,CAAC;YACpB,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,yBAAyB,KAAK,IAAI;YAC3E,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI;YACjE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,KAAK,IAAI;YAC7D,eAAe,EAAE,KAAK;SACtB,CAAC;KACF,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO;QACN,GAAG,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,OAAO,KAAK,CAAC,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClH,kCAAkC,EAAE,KAAK,CAAC,kCAAkC,KAAK,IAAI;QACrF,GAAG,CAAC,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,GAAG,CAAC,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,yBAAyB,EAAE,KAAK,CAAC,yBAAyB,KAAK,IAAI;QACnE,GAAG,CAAC,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,KAAK,IAAI;KACzD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,QAAgB;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAyB;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,4BAA4B,CAAC;IAChG,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,uCAAuC,CAAC;IACvE,IACC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,KAAK,KAAK,GAAG;QACb,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAEnB,OAAO,yEAAyE,CAAC;IAClF,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB,EAAE,KAAa,EAAE,SAAiB;IAChF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,KAAK,cAAc,CAAC;IACnF,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS;QAAE,OAAO,GAAG,KAAK,uBAAuB,SAAS,EAAE,CAAC;IAChF,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,GAAG,KAAK,+BAA+B,CAAC;IAC7E,IAAI,mJAAmJ,CAAC,IAAI,CAAC,KAAK,CAAC;QAClK,OAAO,GAAG,KAAK,qDAAqD,CAAC;IACtE,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,YAAoB;IAC/D,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;IAC/D,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe,EAAE,YAAoB;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACxE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE;YAC7D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACrC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACpF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IAC7F,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IACvF,IAAI,IAAI,CAAC,IAAI,GAAG,wBAAwB;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC;IAC1H,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IAClF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,eAAuB,EAAE,IAAwB;IACxF,MAAM,YAAY,GAAG,GAAG,MAAM,2CAA2C,OAAO,CAAC,GAAG,EAAE,CAAC;IACvF,aAAa,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,IAAI,KAAK,SAAS;QAAE,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACtD,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,yCAAyC,CAAC,KAKzD;IACA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QACzG,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,0DAA0D,EAAE,CAAC,CAAC;IACjG,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QACnG,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,sDAAsD,EAAE,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,yBAAyB,KAAK,IAAI;QAC7C,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC,CAAC;IACnF,IAAI,OAAO,CAAC,oBAAoB,KAAK,IAAI;QACxC,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC,CAAC;IAC9E,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,GAAG;QACrI,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC,CAAC;IAC5E,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QACnF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACnE,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;IAC5G,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;IAC9E,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC;IAC7E,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,CAAC,kCAAkC,KAAK,IAAI;QACpF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,oGAAoG,EAAE,CAAC,CAAC;IAC3I,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC;QAC5E,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,yDAAyD,EAAE,CAAC,CAAC;IAEhG,MAAM,cAAc,GAAG,OAAO,CAAC,cAAwB,CAAC;IACxD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAyB,CAAC;IAC1D,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,WAAW,CAAC,oBAAoB,UAAU,IAAI,KAAK,EAAE,EAAE,oBAAoB,KAAK,EAAE,CAAC,CAAC;IAC1G,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACJ,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAClE,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yCAAyC,EAAE,CAAC,CAAC;IACzH,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,wBAAwB,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,IAAI,wBAAwB,KAAK,YAAY;QAC1E,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;IACvE,MAAM,2BAA2B,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAiD;QAC5D,cAAc,EAAE,6CAA6C;QAC7D,eAAe,EAAE,aAAa;QAC9B,WAAW,EAAE,UAAU;QACvB,iBAAiB,EAAE,OAAO,CAAC,eAAyB;QACpD,gBAAgB,EAAE,cAAc;QAChC,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,2BAA2B,EAAE,YAAY,EAAE,CAAC;QACpF,2BAA2B,EAAE,wBAAwB;QACrD,8BAA8B,EAAE,2BAA2B;QAC3D,cAAc,EAAG,OAAO,CAAC,aAAwB,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACtE,eAAe,EAAE,QAAQ,CAAC,WAAW,EAAE;QACvC,wBAAwB,EAAE,IAAI;QAC9B,2BAA2B,EAAE,IAAI;QACjC,sBAAsB,EAAE,IAAI;QAC5B,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,IAAI;QACpB,oBAAoB,EAAE,KAAK;QAC3B,oBAAoB,EAAE,KAAK;QAC3B,uBAAuB,EAAE,KAAK;QAC9B,qBAAqB,EAAE,KAAK;QAC5B,sBAAsB,EAAE,KAAK;QAC7B,iBAAiB,EAAE,KAAK;QACxB,qBAAqB,EAAE,KAAK;QAC5B,0BAA0B,EAAE,KAAK;QACjC,oBAAoB,EAAE,KAAK;QAC3B,YAAY,EAAE,KAAK;QACnB,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,KAAK;QACxB,aAAa,EAAE,KAAK;QACpB,4BAA4B,EAAE,KAAK;KACnC,CAAC;IACF,MAAM,QAAQ,GAAG,2CAA2C,CAAC;QAC5D,UAAU;QACV,UAAU,EAAE,aAAa;QACzB,MAAM;KACN,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS;QACrD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,6CAA6C,EAAE,CAAC,CAAC;IAClH,MAAM,SAAS,GAAG,+BAA+B,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1G,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAChD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,mDAAmD,EAAE,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG,GAAG,MAAM,kCAAkC,OAAO,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;IAC/E,IAAI,CAAC;QACJ,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;YACpC,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC,CAAC;QAC3F,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,2BAA2B,EAAE,CAAC;YACxD,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,uDAAuD,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,OAAO,GAAG,0CAA0C,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACjB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,sCAAsC,EAAE,CAAC,CAAC;QAC1G,CAAC;QACD,MAAM,QAAQ,GAAG,+BAA+B,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACzG,MAAM,cAAc,GACnB,QAAQ,CAAC,EAAE;YACX,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC7B,QAAQ,CAAC,OAAO,CAAC,IAAI,CACpB,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,CAAC,aAAa,KAAK,iCAAiC;gBACzD,KAAK,CAAC,UAAU,KAAK,aAAa;gBAClC,KAAK,CAAC,MAAM,CAAC,8BAA8B,KAAK,2BAA2B,CAC5E,CAAC;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACzB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,qDAAqD,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO;YACN,MAAM,EAAE,0BAA0B;YAClC,UAAU;YACV,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,2BAA2B;YAC3B,cAAc,EAAE,iDAAiD,cAAc,yCAAyC,aAAa,GAAG;YACxI,eAAe,EAAE,eAAe,EAAE;YAClC,SAAS,EAAE,SAAS,CAAC;gBACpB,yBAAyB,EAAE,IAAI;gBAC/B,oBAAoB,EAAE,IAAI;gBAC1B,sBAAsB,EAAE,IAAI;gBAC5B,eAAe,EAAE,IAAI;aACrB,CAAC;SACF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,oDAAoD;QACrD,CAAC;QACD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;IACzG,CAAC;AACF,CAAC"}
@@ -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":"AASA,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;AA2KD,wBAAsB,8BAA8B,CAAC,KAAK,EAAE;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAkBhD"}
@@ -0,0 +1,193 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { applyFlowDeskSessionEvidenceWriteIntentsV1, prepareFlowDeskSessionEvidenceWriteIntentV1, } from "@flowdesk/core";
5
+ function isRecord(value) {
6
+ return typeof value === "object" && value !== null && !Array.isArray(value);
7
+ }
8
+ function safeString(value) {
9
+ return typeof value === "string" && value.trim().length > 0 ? value : undefined;
10
+ }
11
+ function shortHash(value) {
12
+ return createHash("sha256").update(JSON.stringify(value)).digest("hex").slice(0, 12);
13
+ }
14
+ function compactLabel(value) {
15
+ const compact = value.replace(/\s+/g, " ").trim();
16
+ return compact.length > 120 ? `${compact.slice(0, 119)}…` : compact;
17
+ }
18
+ function eventProperties(event) {
19
+ const record = isRecord(event) ? event : undefined;
20
+ return isRecord(record?.properties) ? record.properties : undefined;
21
+ }
22
+ function eventType(event) {
23
+ return safeString(isRecord(event) ? event.type : undefined);
24
+ }
25
+ function eventSessionId(event) {
26
+ const properties = eventProperties(event);
27
+ const direct = safeString(properties?.sessionID);
28
+ if (direct !== undefined)
29
+ return direct;
30
+ const part = isRecord(properties?.part) ? properties.part : undefined;
31
+ const partSession = safeString(part?.sessionID);
32
+ if (partSession !== undefined)
33
+ return partSession;
34
+ const info = isRecord(properties?.info) ? properties.info : undefined;
35
+ return safeString(info?.sessionID);
36
+ }
37
+ function readJson(path) {
38
+ try {
39
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
40
+ return isRecord(parsed) ? parsed : undefined;
41
+ }
42
+ catch {
43
+ return undefined;
44
+ }
45
+ }
46
+ function findChildSessionBinding(rootDir, childSessionId) {
47
+ const sessionsDir = join(rootDir, ".flowdesk", "sessions");
48
+ if (!existsSync(sessionsDir))
49
+ return undefined;
50
+ for (const workflowId of readdirSync(sessionsDir)) {
51
+ const evidenceDir = join(sessionsDir, workflowId, "evidence", "agent-task-child-session");
52
+ if (!existsSync(evidenceDir))
53
+ continue;
54
+ for (const file of readdirSync(evidenceDir)) {
55
+ if (!file.endsWith(".json"))
56
+ continue;
57
+ const record = readJson(join(evidenceDir, file));
58
+ if (record?.child_session_id !== childSessionId)
59
+ continue;
60
+ const laneId = safeString(record.lane_id);
61
+ const taskId = safeString(record.task_id);
62
+ const agentRef = safeString(record.agent_ref);
63
+ const providerQualifiedModelId = safeString(record.provider_qualified_model_id);
64
+ const parentSessionRef = safeString(record.parent_session_ref);
65
+ if (laneId === undefined || taskId === undefined || agentRef === undefined || providerQualifiedModelId === undefined || parentSessionRef === undefined)
66
+ continue;
67
+ return { workflowId, laneId, taskId, childSessionId, parentSessionRef, agentRef, providerQualifiedModelId };
68
+ }
69
+ }
70
+ return undefined;
71
+ }
72
+ function writeEvidence(rootDir, workflowId, evidenceId, record) {
73
+ const prepared = prepareFlowDeskSessionEvidenceWriteIntentV1({ workflowId, evidenceId, record });
74
+ if (!prepared.ok || prepared.writeIntent === undefined)
75
+ return false;
76
+ const applied = applyFlowDeskSessionEvidenceWriteIntentsV1(rootDir, [prepared.writeIntent]);
77
+ return applied.ok && applied.writtenPaths.length > 0;
78
+ }
79
+ function writeProgress(rootDir, binding, event, phase, label) {
80
+ const digest = shortHash(event);
81
+ const record = {
82
+ schema_version: "flowdesk.agent_task_progress.v1",
83
+ workflow_id: binding.workflowId,
84
+ lane_id: binding.laneId,
85
+ task_id: binding.taskId,
86
+ agent_ref: binding.agentRef,
87
+ provider_qualified_model_id: binding.providerQualifiedModelId,
88
+ progress_seq: Number.parseInt(digest.slice(0, 6), 16) + 1,
89
+ observed_at: new Date().toISOString(),
90
+ phase,
91
+ progress_label: compactLabel(label),
92
+ progress_ref: `progress-${binding.laneId}-event-${digest}`,
93
+ redaction_version: "v1",
94
+ dispatch_authority_enabled: false,
95
+ };
96
+ return writeEvidence(rootDir, binding.workflowId, `agent-task-progress-${binding.laneId}-event-${digest}`, record);
97
+ }
98
+ function writeSessionErrorTerminal(rootDir, binding, event) {
99
+ const digest = shortHash(event);
100
+ const observedAt = new Date().toISOString();
101
+ let written = 0;
102
+ if (writeEvidence(rootDir, binding.workflowId, `task-failed-${binding.taskId}-event-session-error-${digest}`, {
103
+ schema_version: "flowdesk.task_failed.v1",
104
+ workflow_id: binding.workflowId,
105
+ lane_id: binding.laneId,
106
+ task_id: binding.taskId,
107
+ agent_ref: binding.agentRef,
108
+ provider_qualified_model_id: binding.providerQualifiedModelId,
109
+ failure_category: "unknown",
110
+ redacted_reason: "OpenCode session.error event observed for FlowDesk child session",
111
+ created_at: observedAt,
112
+ dispatch_authority_enabled: false,
113
+ }))
114
+ written++;
115
+ if (writeEvidence(rootDir, binding.workflowId, `lifecycle-agent-task-event-session-error-${binding.laneId}-${digest}`, {
116
+ schema_version: "flowdesk.lane_lifecycle_record.v1",
117
+ lane_id: binding.laneId,
118
+ workflow_id: binding.workflowId,
119
+ attempt_id: `attempt-${binding.laneId}-event-${digest}`,
120
+ parent_session_ref: binding.parentSessionRef,
121
+ child_session_ref: `ses-${binding.childSessionId}`,
122
+ agent_ref: binding.agentRef,
123
+ provider_qualified_model_id: binding.providerQualifiedModelId,
124
+ state: "invocation_failed",
125
+ timeout_ms: 60_000,
126
+ orphan_max_age_ms: 600_000,
127
+ retry_count: 0,
128
+ created_at: observedAt,
129
+ updated_at: observedAt,
130
+ spawned_by: "flowdesk",
131
+ durability: "best_effort_no_dir_fsync",
132
+ dispatch_authority_enabled: false,
133
+ providerCall: false,
134
+ actualLaneLaunch: false,
135
+ runtimeExecution: false,
136
+ }))
137
+ written++;
138
+ return written;
139
+ }
140
+ function eventProgress(event) {
141
+ const type = eventType(event);
142
+ const properties = eventProperties(event);
143
+ if (type === "permission.updated")
144
+ return { phase: "awaiting_permission", label: "agent task awaiting OpenCode permission response" };
145
+ if (type === "permission.replied")
146
+ return { phase: "waiting", label: "agent task OpenCode permission response observed" };
147
+ if (type === "session.error")
148
+ return { phase: "failed", label: "agent task session error observed" };
149
+ if (type === "session.idle")
150
+ return { phase: "finalizing", label: "agent task session idle event observed" };
151
+ if (type === "session.status") {
152
+ const status = isRecord(properties?.status) ? properties.status : undefined;
153
+ if (status?.type === "retry")
154
+ return { phase: "retrying", label: "agent task session retry event observed" };
155
+ if (status?.type === "idle")
156
+ return { phase: "finalizing", label: "agent task session idle status observed" };
157
+ if (status?.type === "busy")
158
+ return { phase: "waiting", label: "agent task session busy event observed" };
159
+ }
160
+ if (type === "message.part.updated") {
161
+ const part = isRecord(properties?.part) ? properties.part : undefined;
162
+ if (part?.type === "step-finish")
163
+ return { phase: "finalizing", label: "agent task terminal step event observed" };
164
+ if (part?.type === "tool" && isRecord(part.state) && part.state.status === "error")
165
+ return { phase: "waiting", label: "agent task tool error event observed" };
166
+ return { phase: "waiting", label: "agent task message part event observed" };
167
+ }
168
+ if (type === "message.updated" || type === "session.updated" || type === "session.diff")
169
+ return { phase: "waiting", label: `agent task ${type} event observed` };
170
+ return undefined;
171
+ }
172
+ export async function observeFlowDeskOpenCodeEventV1(input) {
173
+ const type = eventType(input.event);
174
+ const sessionId = eventSessionId(input.event);
175
+ if (type === undefined || sessionId === undefined)
176
+ return { matched: false, eventType: type, sessionId, evidenceWritten: 0 };
177
+ const binding = findChildSessionBinding(input.rootDir, sessionId);
178
+ if (binding === undefined)
179
+ return { matched: false, eventType: type, sessionId, evidenceWritten: 0 };
180
+ const progress = eventProgress(input.event);
181
+ const progressWritten = progress === undefined ? false : writeProgress(input.rootDir, binding, input.event, progress.phase, progress.label);
182
+ const terminalWritten = type === "session.error" ? writeSessionErrorTerminal(input.rootDir, binding, input.event) : 0;
183
+ return {
184
+ matched: true,
185
+ eventType: type,
186
+ sessionId,
187
+ workflowId: binding.workflowId,
188
+ laneId: binding.laneId,
189
+ taskId: binding.taskId,
190
+ evidenceWritten: (progressWritten ? 1 : 0) + terminalWritten,
191
+ };
192
+ }
193
+ //# sourceMappingURL=event-hook-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-hook-observer.js","sourceRoot":"","sources":["../src/event-hook-observer.ts"],"names":[],"mappings":"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"}
@@ -489,6 +489,7 @@ export interface FlowDeskInjectedSdkReviewerVerdictObservationRequestV1 {
489
489
  bindingRef: string;
490
490
  perspective: FlowDeskTopTierReviewPerspective;
491
491
  directory?: string;
492
+ messagesResponse?: unknown;
492
493
  }
493
494
  export interface FlowDeskInjectedSdkReviewerVerdictObservationResultV1 {
494
495
  adapterProfile: "injected_sdk_reviewer_verdict_observation";