@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.
- package/dist/bootstrap-cli.d.ts +16 -0
- package/dist/bootstrap-cli.d.ts.map +1 -0
- package/dist/bootstrap-cli.js +171 -0
- package/dist/bootstrap-cli.js.map +1 -0
- package/dist/bootstrap-installer.d.ts +51 -0
- package/dist/bootstrap-installer.d.ts.map +1 -0
- package/dist/bootstrap-installer.js +458 -0
- package/dist/bootstrap-installer.js.map +1 -0
- package/dist/command-handlers.d.ts +36 -0
- package/dist/command-handlers.d.ts.map +1 -0
- package/dist/command-handlers.js +296 -0
- package/dist/command-handlers.js.map +1 -0
- package/dist/commands.d.ts +74 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +302 -0
- package/dist/commands.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/local-adapter.d.ts +65 -0
- package/dist/local-adapter.d.ts.map +1 -0
- package/dist/local-adapter.js +611 -0
- package/dist/local-adapter.js.map +1 -0
- package/dist/managed-dispatch-adapter.d.ts +145 -0
- package/dist/managed-dispatch-adapter.d.ts.map +1 -0
- package/dist/managed-dispatch-adapter.js +220 -0
- package/dist/managed-dispatch-adapter.js.map +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +465 -0
- package/dist/server.js.map +1 -0
- package/dist/tool-stubs.d.ts +107 -0
- package/dist/tool-stubs.d.ts.map +1 -0
- package/dist/tool-stubs.js +329 -0
- package/dist/tool-stubs.js.map +1 -0
- package/package.json +54 -0
|
@@ -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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"}
|