@flowdesk/opencode-plugin 0.1.0

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.
@@ -0,0 +1,611 @@
1
+ import { applyWriteIntentsToDurableState, applyWriteIntentsToInMemoryState, evaluateFlowDeskProductionEnablementV1, invalid, loadFlowDeskDurableWorkflowState, mergePolicyPacksV1, prepareAttemptRecordWriteIntent, prepareLaneRecordWriteIntent, prepareWorkflowActiveWriteIntent, prepareWorkflowRecordWriteIntent, reloadFlowDeskSessionEvidenceV1, valid } from "@flowdesk/core";
2
+ import { evaluateFlowDeskCommandBackedHandlerV1 } from "./command-handlers.js";
3
+ export const flowdeskLocalNonDispatchAdapterProfile = "local_non_dispatch_command_adapter";
4
+ const disabledAuthority = {
5
+ productionRegistrationEligible: false,
6
+ realOpenCodeDispatch: false,
7
+ actualLaneLaunch: false,
8
+ providerCall: false,
9
+ runtimeExecution: false,
10
+ fallbackAuthority: false,
11
+ hardCancelOrNoReplyAuthority: false
12
+ };
13
+ const taxonomy = {
14
+ primary_category: "coding",
15
+ difficulty_drivers: ["local non-dispatch adapter"],
16
+ coupling_scope: "few_files",
17
+ algorithmic_hardness: "low",
18
+ architecture_hardness: "low",
19
+ migration_state_hardness: "none",
20
+ domain_uncertainty: "low",
21
+ verification_hardness: "low",
22
+ operational_risk: "low",
23
+ policy_professional_boundary: "ordinary"
24
+ };
25
+ function isRecord(value) {
26
+ return typeof value === "object" && value !== null && !Array.isArray(value);
27
+ }
28
+ function safeToken(value, fallback) {
29
+ const raw = typeof value === "string" && value.length > 0 ? value : fallback;
30
+ const token = raw.replaceAll(/[^A-Za-z0-9_.:-]/g, "-").slice(0, 80);
31
+ return token.length > 0 ? token : fallback;
32
+ }
33
+ function safeHash(value) {
34
+ const source = typeof value === "string" ? value.trim().slice(0, 500) : "";
35
+ let hash = 2166136261;
36
+ for (const char of source) {
37
+ hash ^= char.charCodeAt(0);
38
+ hash = Math.imul(hash, 16777619);
39
+ }
40
+ return `summary-${(hash >>> 0).toString(16).padStart(8, "0")}`;
41
+ }
42
+ function id(prefix, request, fallback = "local") {
43
+ return `${prefix}-${safeToken(request.request_id ?? request.workflow_id, fallback)}`;
44
+ }
45
+ function workflowIdFrom(request) {
46
+ return isRecord(request) && typeof request.workflow_id === "string" && request.workflow_id.length > 0 ? request.workflow_id : "workflow-local";
47
+ }
48
+ function nowParts(now = new Date()) {
49
+ const nowMs = now.getTime();
50
+ return {
51
+ nowIso: now.toISOString(),
52
+ expiresAtIso: new Date(nowMs + 24 * 60 * 60 * 1000).toISOString(),
53
+ nowMs
54
+ };
55
+ }
56
+ function retention() {
57
+ return {
58
+ session_records_max_days: 14,
59
+ debug_staging_max_days: 7,
60
+ conformance_summary_max_days: 30,
61
+ allow_user_longer_retention: false,
62
+ deletion_behavior: "delete_after_expiry"
63
+ };
64
+ }
65
+ function usagePolicy() {
66
+ return {
67
+ usage_freshness_ttl_minutes: 15,
68
+ unknown_usage_dispatchability: "non_dispatchable",
69
+ stale_usage_dispatchability: "non_dispatchable",
70
+ refused_usage_dispatchability: "non_dispatchable",
71
+ shared_limit_suspected_dispatchability: "non_dispatchable",
72
+ fallback_derived_dispatchability: "non_dispatchable",
73
+ allow_local_history_source: false,
74
+ allow_provider_console_scraping: false
75
+ };
76
+ }
77
+ function providerHealthPolicy() {
78
+ return {
79
+ health_freshness_ttl_minutes: 10,
80
+ unavailable_dispatchability: "non_dispatchable",
81
+ degraded_dispatchability: "diagnostic_only",
82
+ opencode_go_usage_without_official_quota: "unknown",
83
+ z_ai_usage_without_official_quota: "unknown",
84
+ allow_automatic_provider_fallback: false
85
+ };
86
+ }
87
+ function projectConfig(parts) {
88
+ return {
89
+ schema_version: "flowdesk.project_config.v1",
90
+ config_id: "config-local",
91
+ created_at: parts.nowIso,
92
+ updated_at: parts.nowIso,
93
+ release_mode: "release1",
94
+ project_root_ref: "project-root-local",
95
+ config_hash: "config-hash-local",
96
+ policy_pack_refs: ["policy-ref-local"],
97
+ policy_pack_hashes: ["policy-hash-local"],
98
+ chat_intake_mode: "steering",
99
+ hook_harness_mode: "enforce",
100
+ retention: retention(),
101
+ usage_policy: usagePolicy(),
102
+ provider_health_policy: providerHealthPolicy(),
103
+ disabled_modes: ["real_dispatch", "managed_fallback", "lane_launch", "hard_chat_blocking"],
104
+ extension_namespaces: ["flowdesk.project"],
105
+ audit_refs: ["audit-local"]
106
+ };
107
+ }
108
+ function policyPack() {
109
+ return {
110
+ schema_version: "flowdesk.policy_pack.v1",
111
+ policy_pack_id: "policy-local",
112
+ policy_pack_hash: "policy-hash-local",
113
+ name: "Local non-dispatch policy",
114
+ version: "1.0.0",
115
+ source_ref: "policy-source-local",
116
+ applies_to_release_modes: ["release1"],
117
+ priority: 1,
118
+ rules: [{ rule_id: "rule-local-approval", effect: "require_approval", target: "permission_class", summary_label: "Require scoped non-dispatch approval for local writes.", refs: ["approval-local"] }],
119
+ hard_ban_refs: ["ban-real-dispatch-local"],
120
+ allowed_extension_namespaces: ["flowdesk.project"],
121
+ redaction_baseline_ref: "redaction-local"
122
+ };
123
+ }
124
+ function effectivePolicy(parts) {
125
+ const config = projectConfig(parts);
126
+ return mergePolicyPacksV1(config, [policyPack()], { effectivePolicyId: "effective-local", computedAt: parts.nowIso, auditRef: "audit-local" });
127
+ }
128
+ export function createFlowDeskLocalNonDispatchPermissionProvider() {
129
+ return ({ nowIso, expiresAtIso, workflowId, permissionClass }) => ({
130
+ schema_version: "flowdesk.non_dispatch_permission.v1",
131
+ permission_id: `permission-${permissionClass}`,
132
+ permission_class: permissionClass,
133
+ workflow_id: workflowId,
134
+ scope_ref: "scope-local",
135
+ grant_source: "typed_confirmation",
136
+ created_at: nowIso,
137
+ expires_at: expiresAtIso,
138
+ config_hash: "config-hash-local",
139
+ policy_pack_hash: "policy-hash-local",
140
+ release_mode: "release1",
141
+ audit_ref: "audit-local"
142
+ });
143
+ }
144
+ function permission(provider, parts, workflowId, permissionClass) {
145
+ return provider({ nowIso: parts.nowIso, expiresAtIso: parts.expiresAtIso, workflowId, permissionClass });
146
+ }
147
+ function guardBoundary(provider, parts, workflowId, permissionClass) {
148
+ return {
149
+ configHash: "config-hash-local",
150
+ scopeRef: "scope-local",
151
+ policy: effectivePolicy(parts),
152
+ auditRef: "audit-local",
153
+ conformanceRef: "conformance-local-non-dispatch",
154
+ runtimeCapabilityRef: "runtime-local-fake",
155
+ nonDispatchPermission: permission(provider, parts, workflowId, permissionClass),
156
+ now: parts.nowMs
157
+ };
158
+ }
159
+ function providerHealth(parts) {
160
+ return {
161
+ schema_version: "flowdesk.provider_health_snapshot.v1",
162
+ snapshot_id: "health-local",
163
+ provider_family: "opencode_go",
164
+ model_family: "unknown",
165
+ observed_at: parts.nowIso,
166
+ freshness: "fresh",
167
+ freshness_ttl: 5,
168
+ source_surface: "doctor_probe",
169
+ availability_state: "healthy",
170
+ failure_class: "none",
171
+ dispatchability: "diagnostic_only",
172
+ source_ref: "health-local-source",
173
+ safe_remediation: "Use FlowDesk local non-dispatch diagnostics before any retry."
174
+ };
175
+ }
176
+ function makePlanContext(request, parts) {
177
+ const workflowId = workflowIdFrom(request);
178
+ return {
179
+ sessionId: "session-local",
180
+ workflowId,
181
+ planRevisionId: id("plan", request),
182
+ planningStepId: id("step-plan", request),
183
+ laneId: id("lane-plan", request),
184
+ laneTaskRef: id("task-plan", request),
185
+ laneSummaryRef: id("lane-summary", request),
186
+ laneEventRef: id("event-plan", request),
187
+ auditRef: "audit-local",
188
+ routeRef: id("route", request),
189
+ nowIso: parts.nowIso,
190
+ taxonomy
191
+ };
192
+ }
193
+ function laneObservabilityRefFor(request, laneClass) {
194
+ return laneClass === "planning_draft"
195
+ ? id("lane-observability", request)
196
+ : id("lane-observability-run", request);
197
+ }
198
+ function makeRunContext(request, parts, permissionProvider) {
199
+ const workflowId = workflowIdFrom(request);
200
+ const runMode = request.run_mode;
201
+ if (runMode === "guarded-dry-run") {
202
+ return {
203
+ guardedDryRun: {
204
+ guardBoundary: guardBoundary(permissionProvider, parts, workflowId, "audit_write"),
205
+ sessionId: "session-local",
206
+ attemptId: id("attempt", request),
207
+ auditEventId: id("event-audit", request),
208
+ nowIso: parts.nowIso,
209
+ decisionRef: id("decision", request),
210
+ routeRef: id("route", request),
211
+ commandShapeHash: id("shape", request),
212
+ runResultRef: id("run-result", request),
213
+ verificationSummaryRef: id("verification", request),
214
+ redactionVersion: "redaction-v1"
215
+ }
216
+ };
217
+ }
218
+ return {
219
+ fakeRuntime: {
220
+ guardBoundary: guardBoundary(permissionProvider, parts, workflowId, "fake_runtime_write"),
221
+ auditWritePermission: permission(permissionProvider, parts, workflowId, "audit_write"),
222
+ stateWritePermission: permission(permissionProvider, parts, workflowId, "state_write"),
223
+ sessionId: "session-local",
224
+ attemptId: id("attempt", request),
225
+ auditEventId: id("event-audit", request),
226
+ outcomeAuditEventId: id("event-outcome", request),
227
+ nowIso: parts.nowIso,
228
+ decisionRef: id("decision", request),
229
+ routeRef: id("route", request),
230
+ commandShapeHash: id("shape", request),
231
+ runResultRef: id("run-result", request),
232
+ runtimeEchoEvidenceRef: id("runtime-echo", request),
233
+ verificationSummaryRef: id("verification", request),
234
+ outcomeAuditRef: "audit-outcome-local",
235
+ redactionVersion: "redaction-v1",
236
+ laneId: id("lane-run", request),
237
+ laneTaskRef: id("task-run", request),
238
+ laneSummaryRef: id("lane-summary-run", request),
239
+ laneObservabilityRef: laneObservabilityRefFor(request, "verification"),
240
+ laneEventRef: id("event-run", request),
241
+ laneDebugRef: "debug-local"
242
+ }
243
+ };
244
+ }
245
+ function laneRecordFor(request, parts, laneClass) {
246
+ const workflowId = workflowIdFrom(request);
247
+ const planRevisionId = typeof request.plan_revision_id === "string" ? request.plan_revision_id : id("plan", request);
248
+ const observabilityRef = laneObservabilityRefFor(request, laneClass);
249
+ return {
250
+ schema_version: "flowdesk.lane_record.v1",
251
+ lane_id: laneClass === "planning_draft" ? id("lane-plan", request) : id("lane-run", request),
252
+ workflow_id: workflowId,
253
+ plan_revision_id: planRevisionId,
254
+ ...(laneClass === "verification" ? { attempt_id: id("attempt", request) } : {}),
255
+ task_ref: laneClass === "planning_draft" ? id("task-plan", request) : id("task-run", request),
256
+ lane_class: laneClass,
257
+ state: "completed",
258
+ created_at: parts.nowIso,
259
+ started_at: parts.nowIso,
260
+ updated_at: parts.nowIso,
261
+ completed_at: parts.nowIso,
262
+ safe_next_action: "/flowdesk-status",
263
+ refs: [laneClass === "planning_draft" ? id("lane-summary", request) : id("lane-summary-run", request), observabilityRef],
264
+ event_refs: [laneClass === "planning_draft" ? id("event-plan", request) : id("event-run", request)],
265
+ audit_refs: ["audit-local"],
266
+ observability_ref: observabilityRef,
267
+ ...(laneClass === "verification" ? { debug_ref: "debug-local" } : {})
268
+ };
269
+ }
270
+ function requiresRunConfirmation(request) {
271
+ return typeof request.risk_hint === "string" && /requires explicit user confirmation/i.test(request.risk_hint);
272
+ }
273
+ function pendingApprovalRef(request) {
274
+ return id("approval", request);
275
+ }
276
+ function pendingExpiresAt(parts) {
277
+ return new Date(parts.nowMs + 15 * 60 * 1000).toISOString();
278
+ }
279
+ function createPendingConfirmation(request, parts, planRevisionId) {
280
+ return {
281
+ status: "pending",
282
+ approvalRef: pendingApprovalRef(request),
283
+ workflowId: workflowIdFrom(request),
284
+ ...(typeof request.session_ref === "string" ? { sessionRef: request.session_ref } : {}),
285
+ ...(typeof request.redacted_intake_ref === "string" ? { redactedIntakeRef: request.redacted_intake_ref } : {}),
286
+ sourceSummaryHash: safeHash(request.goal_summary ?? request.intake_summary),
287
+ planRevisionId,
288
+ createdAtIso: parts.nowIso,
289
+ expiresAtIso: pendingExpiresAt(parts)
290
+ };
291
+ }
292
+ function matchesOptionalScope(expected, actual) {
293
+ return expected === undefined || actual === expected;
294
+ }
295
+ function validatePendingConfirmation(state, request, parts) {
296
+ const pending = state.pendingConfirmation;
297
+ if (pending === undefined)
298
+ return invalid("pending confirmation is required before chat-routed run");
299
+ if (pending.status !== "pending")
300
+ return invalid(`pending confirmation is ${pending.status}`);
301
+ if (Date.parse(pending.expiresAtIso) <= parts.nowMs) {
302
+ pending.status = "expired";
303
+ return invalid("pending confirmation expired");
304
+ }
305
+ const summaryMatches = pending.sourceSummaryHash === safeHash(request.goal_summary ?? request.intake_summary);
306
+ const sourceRefMatches = pending.redactedIntakeRef !== undefined && request.redacted_intake_ref === pending.redactedIntakeRef;
307
+ const errors = [];
308
+ if (request.user_approval_ref !== pending.approvalRef)
309
+ errors.push("user_approval_ref does not match pending confirmation");
310
+ if (workflowIdFrom(request) !== pending.workflowId)
311
+ errors.push("workflow_id does not match pending confirmation");
312
+ if (!matchesOptionalScope(pending.sessionRef, request.session_ref))
313
+ errors.push("session_ref does not match pending confirmation");
314
+ if (!summaryMatches && !sourceRefMatches)
315
+ errors.push("approval source does not match pending confirmation");
316
+ return errors.length === 0 ? valid() : invalid(...errors);
317
+ }
318
+ function shouldGateRun(state, request) {
319
+ return request.input_mode === "chat_routed" || state.workflow?.state === "plan_pending_approval";
320
+ }
321
+ function consumePendingConfirmation(state, parts) {
322
+ if (state.pendingConfirmation !== undefined) {
323
+ state.pendingConfirmation = { ...state.pendingConfirmation, status: "consumed", consumedAtIso: parts.nowIso };
324
+ }
325
+ }
326
+ function cancelPendingConfirmation(state, request, parts) {
327
+ const pending = state.pendingConfirmation;
328
+ if (pending === undefined || pending.status !== "pending")
329
+ return;
330
+ if (workflowIdFrom(request) !== pending.workflowId)
331
+ return;
332
+ if (!matchesOptionalScope(pending.sessionRef, request.session_ref))
333
+ return;
334
+ state.pendingConfirmation = { ...pending, status: "cancelled", cancelledAtIso: parts.nowIso };
335
+ }
336
+ function applyAdapterWriteIntents(state, intents, parts) {
337
+ try {
338
+ if (state.durableStateRootDir !== undefined) {
339
+ const durableResult = applyWriteIntentsToDurableState(state.durableStateRootDir, intents, { now: parts.nowMs });
340
+ state.lastDurableStateWriteApplied = durableResult.ok;
341
+ if (!durableResult.ok)
342
+ return false;
343
+ state.durableStateWrites += durableResult.writtenPaths?.length ?? 0;
344
+ }
345
+ else {
346
+ state.lastDurableStateWriteApplied = false;
347
+ }
348
+ state.inMemoryState = applyWriteIntentsToInMemoryState(intents, state.inMemoryState, { now: parts.nowMs });
349
+ return true;
350
+ }
351
+ catch {
352
+ state.lastDurableStateWriteApplied = false;
353
+ return false;
354
+ }
355
+ }
356
+ function updateWorkflowState(state, request, parts, nextState) {
357
+ const workflowId = workflowIdFrom(request);
358
+ const planRevisionId = typeof request.plan_revision_id === "string" ? request.plan_revision_id : id("plan", request);
359
+ const laneRefs = state.laneRecords.flatMap((record) => record.refs);
360
+ const pendingConfirmation = nextState === "plan_pending_approval";
361
+ const workflow = {
362
+ schema_version: "flowdesk.workflow_record.v1",
363
+ workflow_id: workflowId,
364
+ session_ref: "session-local-ref",
365
+ created_at: state.workflow?.created_at ?? parts.nowIso,
366
+ updated_at: parts.nowIso,
367
+ state: nextState,
368
+ latest_plan_revision_id: planRevisionId,
369
+ current_step_id: typeof request.step_id === "string" ? request.step_id : id("step-plan", request),
370
+ project_root_ref: "project-root-local",
371
+ config_hash: "config-hash-local",
372
+ policy_pack_id: "policy-local",
373
+ policy_pack_hash: "policy-hash-local",
374
+ ...(nextState === "complete" ? { current_attempt_id: id("attempt", request) } : {}),
375
+ attempt_refs: nextState === "complete" ? [id("attempt", request)] : [],
376
+ checkpoint_refs: [],
377
+ lane_refs: laneRefs,
378
+ latest_lane_summary_refs: laneRefs,
379
+ audit_refs: ["audit-local"],
380
+ status_summary_ref: "status-summary-local",
381
+ artifact_disposition: "quarantined",
382
+ ...(pendingConfirmation ? {
383
+ blocker_summary: {
384
+ category: "policy",
385
+ summary: "Execution-like chat intake is waiting for explicit user confirmation before any run.",
386
+ safe_remediation: "Review the FlowDesk plan and provide typed confirmation before using /flowdesk-run.",
387
+ refs: [id("confirmation-pending", request)]
388
+ }
389
+ } : {}),
390
+ safe_next_actions: pendingConfirmation ? ["/flowdesk-plan", "/flowdesk-status"] : ["/flowdesk-status"]
391
+ };
392
+ const active = {
393
+ schema_version: "flowdesk.workflow_active.v1",
394
+ active_workflow_id: workflowId,
395
+ ...(nextState === "complete" ? { active_attempt_id: id("attempt", request) } : {}),
396
+ state: nextState,
397
+ updated_at: parts.nowIso,
398
+ status_summary_ref: "status-summary-local",
399
+ audit_refs: ["audit-local"]
400
+ };
401
+ const intents = [prepareWorkflowActiveWriteIntent(active).writeIntent, prepareWorkflowRecordWriteIntent(workflow).writeIntent].filter((intent) => intent !== undefined);
402
+ if (intents.length !== 2)
403
+ return false;
404
+ if (!applyAdapterWriteIntents(state, intents, parts))
405
+ return false;
406
+ state.active = active;
407
+ state.workflow = workflow;
408
+ return true;
409
+ }
410
+ function recordPlanningState(state, request, parts) {
411
+ const lane = laneRecordFor(request, parts, "planning_draft");
412
+ const laneIntent = prepareLaneRecordWriteIntent("session-local", lane).writeIntent;
413
+ if (laneIntent === undefined)
414
+ return false;
415
+ if (!applyAdapterWriteIntents(state, [laneIntent], parts))
416
+ return false;
417
+ const previousLaneRecords = state.laneRecords;
418
+ state.laneRecords = [lane];
419
+ const pendingConfirmation = requiresRunConfirmation(request);
420
+ if (!updateWorkflowState(state, request, parts, pendingConfirmation ? "plan_pending_approval" : "ready_to_run")) {
421
+ state.laneRecords = previousLaneRecords;
422
+ return false;
423
+ }
424
+ if (pendingConfirmation)
425
+ state.pendingConfirmation = createPendingConfirmation(request, parts, typeof request.plan_revision_id === "string" ? request.plan_revision_id : id("plan", request));
426
+ return true;
427
+ }
428
+ function recordRunState(state, request, parts, permissionProvider) {
429
+ const workflowId = workflowIdFrom(request);
430
+ const attempt = {
431
+ schema_version: "flowdesk.attempt_record.v1",
432
+ attempt_id: id("attempt", request),
433
+ workflow_id: workflowId,
434
+ ...(typeof request.step_id === "string" ? { step_id: request.step_id } : {}),
435
+ created_at: parts.nowIso,
436
+ updated_at: parts.nowIso,
437
+ run_mode: request.run_mode === "guarded-dry-run" ? "guarded-dry-run" : "fake-runtime",
438
+ state_at_start: "ready_to_run",
439
+ state_at_end: "complete",
440
+ attempt_state: "complete",
441
+ guard_decision_ref: id("decision", request),
442
+ non_dispatch_permission_ref: permission(permissionProvider, parts, workflowId, request.run_mode === "guarded-dry-run" ? "audit_write" : "fake_runtime_write").permission_id,
443
+ command_shape_hash: id("shape", request),
444
+ runtime_capability_ref: "runtime-local-fake",
445
+ pre_run_audit_ref: "audit-local",
446
+ runtime_echo_validation: "not_applicable",
447
+ verification_ref: id("verification", request),
448
+ artifact_disposition: "quarantined",
449
+ outcome_audit_ref: "audit-outcome-local",
450
+ safe_next_actions: ["/flowdesk-status", "/flowdesk-export-debug"]
451
+ };
452
+ const lane = laneRecordFor(request, parts, "verification");
453
+ const attemptIntent = prepareAttemptRecordWriteIntent(attempt).writeIntent;
454
+ const laneIntent = prepareLaneRecordWriteIntent("session-local", lane).writeIntent;
455
+ if (attemptIntent === undefined || laneIntent === undefined)
456
+ return false;
457
+ if (!applyAdapterWriteIntents(state, [attemptIntent, laneIntent], parts))
458
+ return false;
459
+ const previousAttempt = state.currentAttempt;
460
+ const previousLaneRecords = state.laneRecords;
461
+ state.currentAttempt = attempt;
462
+ state.laneRecords = [...state.laneRecords.filter((record) => record.lane_id !== lane.lane_id), lane];
463
+ if (!updateWorkflowState(state, request, parts, "complete")) {
464
+ state.currentAttempt = previousAttempt;
465
+ state.laneRecords = previousLaneRecords;
466
+ return false;
467
+ }
468
+ return true;
469
+ }
470
+ function statusContext(state, request, parts) {
471
+ const requestedWorkflowId = workflowIdFrom(request);
472
+ if (state.durableStateRootDir !== undefined && (state.workflow === undefined || state.workflow.workflow_id !== requestedWorkflowId)) {
473
+ const loaded = loadFlowDeskDurableWorkflowState(state.durableStateRootDir, { workflowId: requestedWorkflowId, sessionId: "session-local", now: parts.nowMs });
474
+ state.lastDurableStateReadErrors = loaded.ok ? [] : loaded.errors;
475
+ if (loaded.ok && loaded.snapshot !== undefined) {
476
+ state.active = loaded.snapshot.active;
477
+ state.workflow = loaded.snapshot.workflow;
478
+ state.currentAttempt = loaded.snapshot.currentAttempt;
479
+ state.laneRecords = loaded.snapshot.laneRecords;
480
+ }
481
+ }
482
+ else {
483
+ state.lastDurableStateReadErrors = [];
484
+ }
485
+ if (state.lastDurableStateReadErrors.length === 0 && (state.workflow === undefined || state.active === undefined))
486
+ updateWorkflowState(state, request, parts, "ready_to_run");
487
+ return {
488
+ active: state.active,
489
+ workflow: state.workflow,
490
+ ...(state.currentAttempt === undefined ? {} : { currentAttempt: state.currentAttempt }),
491
+ laneRecords: state.laneRecords,
492
+ providerHealthSnapshot: providerHealth(parts),
493
+ auditRef: "audit-local",
494
+ debugRef: "debug-local",
495
+ now: parts.nowMs
496
+ };
497
+ }
498
+ function productionEnablementContext(state, request) {
499
+ if (state.productionEnablement?.enabled !== true || state.durableStateRootDir === undefined)
500
+ return undefined;
501
+ const workflowId = workflowIdFrom(request);
502
+ const evidenceReload = reloadFlowDeskSessionEvidenceV1({ workflowId, rootDir: state.durableStateRootDir });
503
+ return evaluateFlowDeskProductionEnablementV1({
504
+ workflowId,
505
+ evidenceReload,
506
+ preDispatchAuditRef: state.productionEnablement.preDispatchAuditRef,
507
+ configuredVerificationRef: state.productionEnablement.configuredVerificationRef,
508
+ externalAuthPolicyRef: state.productionEnablement.externalAuthPolicyRef,
509
+ providerPolicyRef: state.productionEnablement.providerPolicyRef,
510
+ laneConformanceRefs: state.productionEnablement.laneConformanceRefs,
511
+ allowIncompleteConformance: state.productionEnablement.allowIncompleteConformance,
512
+ approvalDecision: state.productionEnablement.approvalDecision
513
+ });
514
+ }
515
+ function contextFor(toolName, request, state, parts, permissionProvider) {
516
+ const record = isRecord(request) ? request : {};
517
+ if (toolName === "flowdesk_plan")
518
+ return { plan: makePlanContext(record, parts) };
519
+ if (toolName === "flowdesk_run")
520
+ return { run: makeRunContext(record, parts, permissionProvider) };
521
+ if (toolName === "flowdesk_status")
522
+ return { status: statusContext(state, record, parts) };
523
+ if (toolName === "flowdesk_retry") {
524
+ const retry = { request: record, providerHealthSnapshot: providerHealth(parts), newAttemptId: id("attempt-retry", record), auditRef: "audit-local", debugRef: "debug-local" };
525
+ return { retry };
526
+ }
527
+ return { diagnostic: { nowIso: parts.nowIso, deleteAfterIso: parts.expiresAtIso, providerHealthSnapshotRef: "health-local", productionEnablement: productionEnablementContext(state, record) } };
528
+ }
529
+ function summarize(state, stateWriteApplied) {
530
+ const pending = state.pendingConfirmation;
531
+ return {
532
+ workflowId: state.workflow?.workflow_id,
533
+ workflowState: state.workflow?.state,
534
+ ...(pending === undefined ? { pendingConfirmationStatus: "missing" } : {
535
+ pendingConfirmationStatus: pending.status,
536
+ pendingConfirmationRef: pending.approvalRef,
537
+ pendingConfirmationWorkflowId: pending.workflowId,
538
+ pendingConfirmationExpiresAt: pending.expiresAtIso
539
+ }),
540
+ laneRecords: state.laneRecords.length,
541
+ inMemoryStateEntries: state.inMemoryState.size,
542
+ durableStateMode: state.durableStateRootDir === undefined ? "memory_only" : "durable_flowdesk_root",
543
+ durableStateWriteApplied: state.lastDurableStateWriteApplied,
544
+ durableStateWrites: state.durableStateWrites,
545
+ stateWriteApplied,
546
+ permissionSource: "tool_boundary_injected",
547
+ ...disabledAuthority
548
+ };
549
+ }
550
+ function blockedRunHandler(toolName, validation) {
551
+ return {
552
+ ...validation,
553
+ toolName,
554
+ handlerMode: "pending_confirmation_invalid",
555
+ requestSchemaValid: false,
556
+ responseSchemaValid: false,
557
+ coreEvaluationOk: false,
558
+ ...disabledAuthority
559
+ };
560
+ }
561
+ function clockDate(clock) {
562
+ return typeof clock === "function" ? clock() : clock;
563
+ }
564
+ export function createFlowDeskLocalNonDispatchAdapterSession(now = new Date(), permissionProvider = createFlowDeskLocalNonDispatchPermissionProvider(), options = {}) {
565
+ const state = { laneRecords: [], inMemoryState: new Map(), durableStateRootDir: options.durableStateRootDir, productionEnablement: options.productionEnablement, durableStateWrites: 0, lastDurableStateWriteApplied: false, lastDurableStateReadErrors: [] };
566
+ return {
567
+ state,
568
+ evaluate(toolName, request) {
569
+ const parts = nowParts(clockDate(now));
570
+ const record = isRecord(request) ? request : {};
571
+ if (toolName === "flowdesk_run" && shouldGateRun(state, record)) {
572
+ const confirmationResult = validatePendingConfirmation(state, record, parts);
573
+ if (!confirmationResult.ok) {
574
+ const handler = blockedRunHandler(toolName, confirmationResult);
575
+ return {
576
+ ...confirmationResult,
577
+ adapterProfile: flowdeskLocalNonDispatchAdapterProfile,
578
+ toolName,
579
+ handler,
580
+ localState: summarize(state, false),
581
+ ...disabledAuthority
582
+ };
583
+ }
584
+ consumePendingConfirmation(state, parts);
585
+ }
586
+ const context = contextFor(toolName, request, state, parts, permissionProvider);
587
+ const handler = evaluateFlowDeskCommandBackedHandlerV1(toolName, request, context);
588
+ let stateWriteApplied = false;
589
+ if (handler.ok && toolName === "flowdesk_plan")
590
+ stateWriteApplied = recordPlanningState(state, record, parts);
591
+ if (handler.ok && toolName === "flowdesk_run")
592
+ stateWriteApplied = recordRunState(state, record, parts, permissionProvider);
593
+ if (handler.ok && toolName === "flowdesk_abort")
594
+ cancelPendingConfirmation(state, record, parts);
595
+ const adapterValidation = state.lastDurableStateReadErrors.length > 0
596
+ ? invalid(...state.lastDurableStateReadErrors)
597
+ : handler.ok && (toolName === "flowdesk_plan" || toolName === "flowdesk_run") && !stateWriteApplied
598
+ ? invalid("local adapter state write failed")
599
+ : valid();
600
+ return {
601
+ ...adapterValidation,
602
+ adapterProfile: flowdeskLocalNonDispatchAdapterProfile,
603
+ toolName,
604
+ handler,
605
+ localState: summarize(state, stateWriteApplied),
606
+ ...disabledAuthority
607
+ };
608
+ }
609
+ };
610
+ }
611
+ //# sourceMappingURL=local-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-adapter.js","sourceRoot":"","sources":["../src/local-adapter.ts"],"names":[],"mappings":"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"}