@flowdesk/core 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/agent-profiles.d.ts +38 -0
- package/dist/agent-profiles.d.ts.map +1 -0
- package/dist/agent-profiles.js +138 -0
- package/dist/agent-profiles.js.map +1 -0
- package/dist/audit.d.ts +11 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +65 -0
- package/dist/audit.js.map +1 -0
- package/dist/bootstrap-foundation.d.ts +83 -0
- package/dist/bootstrap-foundation.d.ts.map +1 -0
- package/dist/bootstrap-foundation.js +773 -0
- package/dist/bootstrap-foundation.js.map +1 -0
- package/dist/chat-routing.d.ts +15 -0
- package/dist/chat-routing.d.ts.map +1 -0
- package/dist/chat-routing.js +172 -0
- package/dist/chat-routing.js.map +1 -0
- package/dist/command-manifest.d.ts +39 -0
- package/dist/command-manifest.d.ts.map +1 -0
- package/dist/command-manifest.js +240 -0
- package/dist/command-manifest.js.map +1 -0
- package/dist/config-policy.d.ts +31 -0
- package/dist/config-policy.d.ts.map +1 -0
- package/dist/config-policy.js +341 -0
- package/dist/config-policy.js.map +1 -0
- package/dist/fake-runtime.d.ts +68 -0
- package/dist/fake-runtime.d.ts.map +1 -0
- package/dist/fake-runtime.js +285 -0
- package/dist/fake-runtime.js.map +1 -0
- package/dist/guard-boundary.d.ts +53 -0
- package/dist/guard-boundary.d.ts.map +1 -0
- package/dist/guard-boundary.js +220 -0
- package/dist/guard-boundary.js.map +1 -0
- package/dist/guarded-dry-run.d.ts +46 -0
- package/dist/guarded-dry-run.d.ts.map +1 -0
- package/dist/guarded-dry-run.js +111 -0
- package/dist/guarded-dry-run.js.map +1 -0
- package/dist/hook-harness.d.ts +8 -0
- package/dist/hook-harness.d.ts.map +1 -0
- package/dist/hook-harness.js +130 -0
- package/dist/hook-harness.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/lane-observability.d.ts +22 -0
- package/dist/lane-observability.d.ts.map +1 -0
- package/dist/lane-observability.js +138 -0
- package/dist/lane-observability.js.map +1 -0
- package/dist/plan.d.ts +37 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +137 -0
- package/dist/plan.js.map +1 -0
- package/dist/production-enablement.d.ts +57 -0
- package/dist/production-enablement.d.ts.map +1 -0
- package/dist/production-enablement.js +259 -0
- package/dist/production-enablement.js.map +1 -0
- package/dist/provider-failures.d.ts +19 -0
- package/dist/provider-failures.d.ts.map +1 -0
- package/dist/provider-failures.js +116 -0
- package/dist/provider-failures.js.map +1 -0
- package/dist/provider-usage-collector.d.ts +60 -0
- package/dist/provider-usage-collector.d.ts.map +1 -0
- package/dist/provider-usage-collector.js +502 -0
- package/dist/provider-usage-collector.js.map +1 -0
- package/dist/redaction.d.ts +5 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +11 -0
- package/dist/redaction.js.map +1 -0
- package/dist/release1-contracts.d.ts +1203 -0
- package/dist/release1-contracts.d.ts.map +1 -0
- package/dist/release1-contracts.js +256 -0
- package/dist/release1-contracts.js.map +1 -0
- package/dist/retry.d.ts +21 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +107 -0
- package/dist/retry.js.map +1 -0
- package/dist/reviewer-lane-conformance.d.ts +35 -0
- package/dist/reviewer-lane-conformance.d.ts.map +1 -0
- package/dist/reviewer-lane-conformance.js +124 -0
- package/dist/reviewer-lane-conformance.js.map +1 -0
- package/dist/schema-artifacts.d.ts +19 -0
- package/dist/schema-artifacts.d.ts.map +1 -0
- package/dist/schema-artifacts.js +182 -0
- package/dist/schema-artifacts.js.map +1 -0
- package/dist/schema-registry.d.ts +32 -0
- package/dist/schema-registry.d.ts.map +1 -0
- package/dist/schema-registry.js +163 -0
- package/dist/schema-registry.js.map +1 -0
- package/dist/session-evidence.d.ts +71 -0
- package/dist/session-evidence.d.ts.map +1 -0
- package/dist/session-evidence.js +336 -0
- package/dist/session-evidence.js.map +1 -0
- package/dist/state-paths.d.ts +20 -0
- package/dist/state-paths.d.ts.map +1 -0
- package/dist/state-paths.js +72 -0
- package/dist/state-paths.js.map +1 -0
- package/dist/state-store.d.ts +75 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +567 -0
- package/dist/state-store.js.map +1 -0
- package/dist/status.d.ts +37 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +304 -0
- package/dist/status.js.map +1 -0
- package/dist/tool-contract-fixtures.d.ts +134 -0
- package/dist/tool-contract-fixtures.d.ts.map +1 -0
- package/dist/tool-contract-fixtures.js +389 -0
- package/dist/tool-contract-fixtures.js.map +1 -0
- package/dist/top-tier-reviewer-lane-probe.d.ts +10 -0
- package/dist/top-tier-reviewer-lane-probe.d.ts.map +1 -0
- package/dist/top-tier-reviewer-lane-probe.js +76 -0
- package/dist/top-tier-reviewer-lane-probe.js.map +1 -0
- package/dist/usage-health.d.ts +44 -0
- package/dist/usage-health.d.ts.map +1 -0
- package/dist/usage-health.js +105 -0
- package/dist/usage-health.js.map +1 -0
- package/dist/validators.d.ts +142 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +1690 -0
- package/dist/validators.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type FlowDeskRelease1MinimumPortableCommandName } from "./command-manifest.js";
|
|
2
|
+
import { type GuardBoundaryDecisionV1, type GuardBoundaryInputV1 } from "./guard-boundary.js";
|
|
3
|
+
import type { FlowDeskAuditRecordV1, FlowDeskRunRequestV1, FlowDeskRunResponseV1, IsoTimestamp, OpaqueId, OpaqueRef } from "./release1-contracts.js";
|
|
4
|
+
import type { FlowDeskStateWriteIntent } from "./state-store.js";
|
|
5
|
+
import { type ValidationResult } from "./validators.js";
|
|
6
|
+
export interface FlowDeskGuardedDryRunCommandInputV1 {
|
|
7
|
+
commandName: FlowDeskRelease1MinimumPortableCommandName;
|
|
8
|
+
request: FlowDeskRunRequestV1;
|
|
9
|
+
guardBoundary: Omit<GuardBoundaryInputV1, "operation" | "workflowId">;
|
|
10
|
+
sessionId: OpaqueId;
|
|
11
|
+
attemptId: OpaqueId;
|
|
12
|
+
auditEventId: OpaqueId;
|
|
13
|
+
nowIso: IsoTimestamp;
|
|
14
|
+
decisionRef: OpaqueRef;
|
|
15
|
+
routeRef: OpaqueRef;
|
|
16
|
+
commandShapeHash: string;
|
|
17
|
+
runResultRef: OpaqueRef;
|
|
18
|
+
verificationSummaryRef: OpaqueRef;
|
|
19
|
+
redactionVersion: string;
|
|
20
|
+
}
|
|
21
|
+
export interface FlowDeskGuardedDryRunPlanningEvidenceV1 {
|
|
22
|
+
plan_revision_id: OpaqueId;
|
|
23
|
+
route_ref: OpaqueRef;
|
|
24
|
+
guard_decision_ref: OpaqueRef;
|
|
25
|
+
command_shape_hash: string;
|
|
26
|
+
pre_run_audit_ref: OpaqueRef;
|
|
27
|
+
request_schema_id: "flowdesk.run.request.v1";
|
|
28
|
+
response_schema_id: "flowdesk.run.response.v1";
|
|
29
|
+
}
|
|
30
|
+
export interface FlowDeskGuardedDryRunCommandEvaluationV1 extends ValidationResult {
|
|
31
|
+
commandName: FlowDeskRelease1MinimumPortableCommandName;
|
|
32
|
+
guardDecision: GuardBoundaryDecisionV1;
|
|
33
|
+
response: FlowDeskRunResponseV1;
|
|
34
|
+
planningEvidence?: FlowDeskGuardedDryRunPlanningEvidenceV1;
|
|
35
|
+
preRunAuditIntent?: FlowDeskStateWriteIntent<FlowDeskAuditRecordV1>;
|
|
36
|
+
runtime: {
|
|
37
|
+
realOpenCodeDispatch: false;
|
|
38
|
+
actualLaneLaunch: false;
|
|
39
|
+
providerCall: false;
|
|
40
|
+
automaticFallbackOrReselection: false;
|
|
41
|
+
hardCancelOrNoReply: false;
|
|
42
|
+
stateWriteApplied: false;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export declare function evaluateFlowDeskGuardedDryRunCommandV1(input: FlowDeskGuardedDryRunCommandInputV1): FlowDeskGuardedDryRunCommandEvaluationV1;
|
|
46
|
+
//# sourceMappingURL=guarded-dry-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guarded-dry-run.d.ts","sourceRoot":"","sources":["../src/guarded-dry-run.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,KAAK,0CAA0C,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAA2B,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvH,OAAO,KAAK,EAAwB,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAyC,MAAM,yBAAyB,CAAC;AAClN,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAiE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvH,MAAM,WAAW,mCAAmC;IAClD,WAAW,EAAE,0CAA0C,CAAC;IACxD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,aAAa,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;IACtE,SAAS,EAAE,QAAQ,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,QAAQ,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,SAAS,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC;IACxB,sBAAsB,EAAE,SAAS,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uCAAuC;IACtD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,kBAAkB,EAAE,SAAS,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,SAAS,CAAC;IAC7B,iBAAiB,EAAE,yBAAyB,CAAC;IAC7C,kBAAkB,EAAE,0BAA0B,CAAC;CAChD;AAED,MAAM,WAAW,wCAAyC,SAAQ,gBAAgB;IAChF,WAAW,EAAE,0CAA0C,CAAC;IACxD,aAAa,EAAE,uBAAuB,CAAC;IACvC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,gBAAgB,CAAC,EAAE,uCAAuC,CAAC;IAC3D,iBAAiB,CAAC,EAAE,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;IACpE,OAAO,EAAE;QACP,oBAAoB,EAAE,KAAK,CAAC;QAC5B,gBAAgB,EAAE,KAAK,CAAC;QACxB,YAAY,EAAE,KAAK,CAAC;QACpB,8BAA8B,EAAE,KAAK,CAAC;QACtC,mBAAmB,EAAE,KAAK,CAAC;QAC3B,iBAAiB,EAAE,KAAK,CAAC;KAC1B,CAAC;CACH;AA2CD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,mCAAmC,GAAG,wCAAwC,CAgF3I"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { preparePreRunAuditWriteIntent } from "./audit.js";
|
|
2
|
+
import { getFlowDeskCommandManifestEntry } from "./command-manifest.js";
|
|
3
|
+
import { evaluateGuardBoundaryV1 } from "./guard-boundary.js";
|
|
4
|
+
import { validateOpaqueId, validateRunRequestV1, validateRunResponseV1 } from "./validators.js";
|
|
5
|
+
const inertRuntime = {
|
|
6
|
+
realOpenCodeDispatch: false,
|
|
7
|
+
actualLaneLaunch: false,
|
|
8
|
+
providerCall: false,
|
|
9
|
+
automaticFallbackOrReselection: false,
|
|
10
|
+
hardCancelOrNoReply: false,
|
|
11
|
+
stateWriteApplied: false
|
|
12
|
+
};
|
|
13
|
+
function resultErrors(...results) {
|
|
14
|
+
return results.flatMap((result) => result.errors);
|
|
15
|
+
}
|
|
16
|
+
function redactedError(category, safeRemediation) {
|
|
17
|
+
return { category, safe_remediation: safeRemediation };
|
|
18
|
+
}
|
|
19
|
+
function responseFor(input, ok, status, userMessage, safeNextActions, error) {
|
|
20
|
+
return {
|
|
21
|
+
schema_version: "flowdesk.run.response.v1",
|
|
22
|
+
ok,
|
|
23
|
+
status,
|
|
24
|
+
safe_next_actions: safeNextActions,
|
|
25
|
+
user_message: userMessage,
|
|
26
|
+
...(error === undefined ? {} : { error }),
|
|
27
|
+
run_result_ref: input.runResultRef,
|
|
28
|
+
verification_summary_ref: input.verificationSummaryRef,
|
|
29
|
+
artifact_disposition: "none"
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function blockedDecision(category, reason) {
|
|
33
|
+
return {
|
|
34
|
+
status: "blocked",
|
|
35
|
+
reason_category: category,
|
|
36
|
+
redacted_reason: reason,
|
|
37
|
+
required_checks: [],
|
|
38
|
+
safe_next_actions: ["/flowdesk-doctor", "/flowdesk-status"]
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function evaluateFlowDeskGuardedDryRunCommandV1(input) {
|
|
42
|
+
const manifestEntry = getFlowDeskCommandManifestEntry(input.commandName);
|
|
43
|
+
const requestResult = validateRunRequestV1(input.request);
|
|
44
|
+
const idErrors = resultErrors(validateOpaqueId(input.sessionId, "session_id"), validateOpaqueId(input.attemptId, "attempt_id"), validateOpaqueId(input.auditEventId, "audit_event_id"), validateOpaqueId(input.decisionRef, "decision_ref"), validateOpaqueId(input.routeRef, "route_ref"), validateOpaqueId(input.commandShapeHash, "command_shape_hash"), validateOpaqueId(input.runResultRef, "run_result_ref"), validateOpaqueId(input.verificationSummaryRef, "verification_summary_ref"));
|
|
45
|
+
const baseErrors = [...requestResult.errors, ...idErrors];
|
|
46
|
+
if (manifestEntry === undefined || input.commandName !== "/flowdesk-run" || manifestEntry.toolName !== "flowdesk_run")
|
|
47
|
+
baseErrors.push("guarded dry-run evaluator only accepts the /flowdesk-run command");
|
|
48
|
+
if (manifestEntry !== undefined && (manifestEntry.actualLaneLaunch || manifestEntry.providerCall || manifestEntry.dispatchApprovalEligible || manifestEntry.fallbackAuthority || manifestEntry.hardCancelOrNoReplyAuthority))
|
|
49
|
+
baseErrors.push("command manifest is not inert for Release 1 dry-run evaluation");
|
|
50
|
+
if (input.request.run_mode !== "guarded-dry-run")
|
|
51
|
+
baseErrors.push("guarded dry-run evaluator requires run_mode guarded-dry-run");
|
|
52
|
+
if (input.request.workflow_id === undefined)
|
|
53
|
+
baseErrors.push("guarded dry-run evaluator requires workflow_id for guard binding");
|
|
54
|
+
if (baseErrors.length > 0) {
|
|
55
|
+
const guardDecision = blockedDecision("schema", "Run command request failed closed before Guard evaluation.");
|
|
56
|
+
const response = responseFor(input, false, "blocked", "FlowDesk blocked this dry-run before execution planning.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("schema", "Run doctor or status, then retry with a schema-valid guarded dry-run request."));
|
|
57
|
+
const responseResult = validateRunResponseV1(response);
|
|
58
|
+
return { ok: false, errors: [...baseErrors, ...responseResult.errors], commandName: input.commandName, guardDecision, response, runtime: inertRuntime };
|
|
59
|
+
}
|
|
60
|
+
const guardDecision = evaluateGuardBoundaryV1({ ...input.guardBoundary, operation: "guarded-dry-run", workflowId: input.request.workflow_id });
|
|
61
|
+
if (guardDecision.status !== "eligible") {
|
|
62
|
+
const response = responseFor(input, false, "blocked", guardDecision.redacted_reason, [...guardDecision.safe_next_actions], redactedError(guardDecision.reason_category, "Use FlowDesk doctor or status to refresh the missing non-dispatch evidence."));
|
|
63
|
+
const responseResult = validateRunResponseV1(response);
|
|
64
|
+
return { ok: false, errors: responseResult.errors, commandName: input.commandName, guardDecision, response, runtime: inertRuntime };
|
|
65
|
+
}
|
|
66
|
+
const auditEvent = {
|
|
67
|
+
schema_version: "flowdesk.audit_event.v1",
|
|
68
|
+
event_id: input.auditEventId,
|
|
69
|
+
event_type: "pre_run_guarded_dry_run",
|
|
70
|
+
workflow_id: input.request.workflow_id,
|
|
71
|
+
attempt_id: input.attemptId,
|
|
72
|
+
...(input.request.step_id === undefined ? {} : { step_id: input.request.step_id }),
|
|
73
|
+
created_at: input.nowIso,
|
|
74
|
+
actor_class: "flowdesk",
|
|
75
|
+
decision_ref: input.decisionRef,
|
|
76
|
+
redaction_version: input.redactionVersion,
|
|
77
|
+
summary_label: "Guarded dry-run planned without dispatch.",
|
|
78
|
+
artifact_refs: [input.runResultRef, input.verificationSummaryRef]
|
|
79
|
+
};
|
|
80
|
+
const auditIntentResult = preparePreRunAuditWriteIntent(input.sessionId, auditEvent, {
|
|
81
|
+
auditRef: input.guardBoundary.auditRef ?? input.decisionRef,
|
|
82
|
+
evidenceRefs: [input.routeRef, input.decisionRef, input.guardBoundary.conformanceRef, input.guardBoundary.runtimeCapabilityRef].filter((ref) => ref !== undefined)
|
|
83
|
+
});
|
|
84
|
+
if (!auditIntentResult.ok || auditIntentResult.writeIntent === undefined) {
|
|
85
|
+
const response = responseFor(input, false, "blocked", "FlowDesk blocked this dry-run because pre-run audit evidence could not be prepared.", ["/flowdesk-doctor", "/flowdesk-status"], redactedError("audit", "Refresh audit evidence before retrying the guarded dry-run."));
|
|
86
|
+
const responseResult = validateRunResponseV1(response);
|
|
87
|
+
return { ok: false, errors: [...auditIntentResult.errors, ...responseResult.errors], commandName: input.commandName, guardDecision: blockedDecision("audit", "Pre-run audit evidence preparation failed."), response, runtime: inertRuntime };
|
|
88
|
+
}
|
|
89
|
+
const response = responseFor(input, true, "dry_run_complete", "FlowDesk completed an inert guarded dry-run plan. No OpenCode dispatch, lane launch, provider call, fallback, cancellation authority, or state write occurred.", ["/flowdesk-status", "/flowdesk-export-debug"], undefined);
|
|
90
|
+
const responseResult = validateRunResponseV1(response);
|
|
91
|
+
const planningEvidence = {
|
|
92
|
+
plan_revision_id: input.request.plan_revision_id,
|
|
93
|
+
route_ref: input.routeRef,
|
|
94
|
+
guard_decision_ref: input.decisionRef,
|
|
95
|
+
command_shape_hash: input.commandShapeHash,
|
|
96
|
+
pre_run_audit_ref: input.guardBoundary.auditRef ?? input.decisionRef,
|
|
97
|
+
request_schema_id: "flowdesk.run.request.v1",
|
|
98
|
+
response_schema_id: "flowdesk.run.response.v1"
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
ok: responseResult.ok,
|
|
102
|
+
errors: responseResult.errors,
|
|
103
|
+
commandName: input.commandName,
|
|
104
|
+
guardDecision,
|
|
105
|
+
response,
|
|
106
|
+
planningEvidence,
|
|
107
|
+
preRunAuditIntent: auditIntentResult.writeIntent,
|
|
108
|
+
runtime: inertRuntime
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=guarded-dry-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guarded-dry-run.js","sourceRoot":"","sources":["../src/guarded-dry-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FlowDeskHookHarnessRequestV1, FlowDeskHookHarnessResponseV1 } from "./release1-contracts.js";
|
|
2
|
+
import type { ValidationResult } from "./validators.js";
|
|
3
|
+
export interface FlowDeskHookHarnessEvaluationV1 extends ValidationResult {
|
|
4
|
+
response: FlowDeskHookHarnessResponseV1;
|
|
5
|
+
}
|
|
6
|
+
export declare function buildFlowDeskHookHarnessResponseV1(request: FlowDeskHookHarnessRequestV1): FlowDeskHookHarnessResponseV1;
|
|
7
|
+
export declare function evaluateFlowDeskHookHarnessV1(request: FlowDeskHookHarnessRequestV1): FlowDeskHookHarnessEvaluationV1;
|
|
8
|
+
//# sourceMappingURL=hook-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-harness.d.ts","sourceRoot":"","sources":["../src/hook-harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,6BAA6B,EAG9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,WAAW,+BAAgC,SAAQ,gBAAgB;IACvE,QAAQ,EAAE,6BAA6B,CAAC;CACzC;AAwED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,4BAA4B,GAAG,6BAA6B,CAqDvH;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,4BAA4B,GAAG,+BAA+B,CAKpH"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { invalid, valid, validateHookHarnessRequestV1, validateHookHarnessResponseV1, validateOpaqueId, validateOpaqueRef } from "./validators.js";
|
|
2
|
+
const safeManualActions = ["/flowdesk-doctor", "/flowdesk-status", "/flowdesk-export-debug"];
|
|
3
|
+
const offFallbackActions = ["/flowdesk-doctor", "/flowdesk-status", "/flowdesk-export-debug"];
|
|
4
|
+
const privilegedCapabilities = new Set([
|
|
5
|
+
"privileged_automation",
|
|
6
|
+
"real_dispatch",
|
|
7
|
+
"provider_call",
|
|
8
|
+
"lane_launch",
|
|
9
|
+
"managed_fallback",
|
|
10
|
+
"hard_chat_control"
|
|
11
|
+
]);
|
|
12
|
+
const unsafeLaterGatePattern = /\b(real[\s_-]*(?:opencode[\s_-]*)?dispatch|realOpenCodeDispatch|actual[\s_-]*lane[\s_-]*launch|actualLaneLaunch|provider[\s_-]*(?:call|request|api)|providerCall|automatic[\s_-]*(?:fallback|reselection)|automaticFallbackOrReselection|fallback[\s_-]*(?:provider|model|authority)|fallbackAuthority|reselect(?:ion)?|hard[\s_-]*(?:cancel|stop|no[\s_-]*reply)|hardCancelOrNoReply|noReply|no[\s_-]*reply|cancel:\s*true|stop:\s*true|opencode[\s_-]*run)\b/i;
|
|
13
|
+
const unsafeShellExecutionPattern = /(?:\$\(|\$\{|`|\b(?:shell[\s_-]*interpolation|command[\s_-]*template[\s_-]*interpolation|pre[\s_-]*hook[\s_-]*(?:execution|exec|run)|before[\s_-]*hook[\s_-]*(?:execution|exec|run))\b)/i;
|
|
14
|
+
function uniqueActions(actions) {
|
|
15
|
+
return [...new Set(actions)].slice(0, 8);
|
|
16
|
+
}
|
|
17
|
+
function redactedAttemptRef(request) {
|
|
18
|
+
const candidate = request?.redacted_attempt_ref;
|
|
19
|
+
return typeof candidate === "string" && validateOpaqueRef(candidate, "redacted_attempt_ref").ok ? candidate : "attempt-redacted";
|
|
20
|
+
}
|
|
21
|
+
function baseResponse(request, fields) {
|
|
22
|
+
return {
|
|
23
|
+
schema_version: "flowdesk.hook_harness.response.v1",
|
|
24
|
+
request_id: validateOpaqueId(request?.request_id, "request_id").ok ? request?.request_id ?? "request-redacted" : "request-redacted",
|
|
25
|
+
hook_harness_mode: request?.hook_harness_mode === "observe" || request?.hook_harness_mode === "off" ? request.hook_harness_mode : "enforce",
|
|
26
|
+
redacted_attempt_ref: redactedAttemptRef(request),
|
|
27
|
+
privileged_automation_enabled: false,
|
|
28
|
+
dispatch_authorized: false,
|
|
29
|
+
guard_bypassed: false,
|
|
30
|
+
fallback_authorized: false,
|
|
31
|
+
hard_chat_authority: false,
|
|
32
|
+
...fields
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function schemaFailedResponse(request) {
|
|
36
|
+
return baseResponse({ ...request, hook_harness_mode: "enforce" }, {
|
|
37
|
+
ok: false,
|
|
38
|
+
decision: "deny",
|
|
39
|
+
diagnostic_observations: ["Hook harness input failed redacted schema validation."],
|
|
40
|
+
safe_next_actions: [...safeManualActions],
|
|
41
|
+
user_message: "FlowDesk blocked this hook harness request before evaluation because the redacted contract was invalid.",
|
|
42
|
+
managed_automation_enabled: false,
|
|
43
|
+
mutation_applied: false,
|
|
44
|
+
denial_applied: true
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function classifyCommandActions(summary, capability) {
|
|
48
|
+
if (/\b(status|progress|checkpoint)\b/i.test(summary))
|
|
49
|
+
return ["/flowdesk-status"];
|
|
50
|
+
if (/\b(doctor|diagnos(?:e|tic)|compatibility|health)\b/i.test(summary))
|
|
51
|
+
return ["/flowdesk-doctor"];
|
|
52
|
+
if (/\b(resume|continue from checkpoint)\b/i.test(summary))
|
|
53
|
+
return ["/flowdesk-status", "/flowdesk-resume"];
|
|
54
|
+
if (/\b(retry|try again)\b/i.test(summary))
|
|
55
|
+
return ["/flowdesk-status", "/flowdesk-retry"];
|
|
56
|
+
if (/\b(abort|cancel workflow|stop workflow)\b/i.test(summary))
|
|
57
|
+
return ["/flowdesk-status", "/flowdesk-abort"];
|
|
58
|
+
if (/\b(usage|quota|limit)\b/i.test(summary))
|
|
59
|
+
return ["/flowdesk-usage", "/flowdesk-doctor"];
|
|
60
|
+
if (/\b(debug export|export debug|debug bundle|logs?)\b/i.test(summary))
|
|
61
|
+
return ["/flowdesk-export-debug", "/flowdesk-status"];
|
|
62
|
+
if (capability === "managed_plan" || capability === "command_backed_flow")
|
|
63
|
+
return ["/flowdesk-plan", "/flowdesk-status"];
|
|
64
|
+
return ["/flowdesk-status", "/flowdesk-doctor"];
|
|
65
|
+
}
|
|
66
|
+
function isUnsafeLaterGate(request) {
|
|
67
|
+
return request.requested_capability === "unknown" || privilegedCapabilities.has(request.requested_capability) || unsafeLaterGatePattern.test(request.attempt_summary) || unsafeShellExecutionPattern.test(request.attempt_summary);
|
|
68
|
+
}
|
|
69
|
+
function lacksManagedConformanceProof(request) {
|
|
70
|
+
return request.hook_harness_mode === "enforce" && request.requested_capability !== "safe_manual" && request.conformance_ref === undefined;
|
|
71
|
+
}
|
|
72
|
+
export function buildFlowDeskHookHarnessResponseV1(request) {
|
|
73
|
+
if (!validateHookHarnessRequestV1(request).ok)
|
|
74
|
+
return schemaFailedResponse(request);
|
|
75
|
+
if (request.hook_harness_mode === "observe") {
|
|
76
|
+
return baseResponse(request, {
|
|
77
|
+
ok: true,
|
|
78
|
+
decision: "observe",
|
|
79
|
+
diagnostic_observations: [isUnsafeLaterGate(request) ? "Observed a later-gate or privileged automation attempt without containment authority." : "Observed a safe manual or command-backed request."],
|
|
80
|
+
safe_next_actions: [...safeManualActions],
|
|
81
|
+
user_message: "FlowDesk hook harness is observing only; it did not mutate, deny, authorize dispatch, or claim containment authority.",
|
|
82
|
+
managed_automation_enabled: false,
|
|
83
|
+
mutation_applied: false,
|
|
84
|
+
denial_applied: false
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if (request.hook_harness_mode === "off") {
|
|
88
|
+
return baseResponse(request, {
|
|
89
|
+
ok: true,
|
|
90
|
+
decision: "off_fallback",
|
|
91
|
+
diagnostic_observations: ["Managed hook harness automation is off; Guard remains required for privileged behavior."],
|
|
92
|
+
safe_next_actions: [...offFallbackActions],
|
|
93
|
+
user_message: "Managed FlowDesk automation is off. Safe manual setup, status, diagnostics, and fallback commands remain available.",
|
|
94
|
+
managed_automation_enabled: false,
|
|
95
|
+
mutation_applied: false,
|
|
96
|
+
denial_applied: false
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (isUnsafeLaterGate(request) || lacksManagedConformanceProof(request)) {
|
|
100
|
+
return baseResponse(request, {
|
|
101
|
+
ok: false,
|
|
102
|
+
decision: "deny",
|
|
103
|
+
diagnostic_observations: [lacksManagedConformanceProof(request) ? "Denied managed hook automation without conformance evidence." : "Denied an unsafe later-gate, unknown, shell-execution, or privileged automation attempt."],
|
|
104
|
+
safe_next_actions: [...safeManualActions],
|
|
105
|
+
user_message: "FlowDesk denied this hook attempt because Release 1 cannot perform real dispatch, provider calls, lane launch, automatic fallback, or hard chat control.",
|
|
106
|
+
managed_automation_enabled: false,
|
|
107
|
+
mutation_applied: false,
|
|
108
|
+
denial_applied: true
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const safeActions = classifyCommandActions(request.attempt_summary, request.requested_capability);
|
|
112
|
+
return baseResponse(request, {
|
|
113
|
+
ok: true,
|
|
114
|
+
decision: request.requested_capability === "safe_manual" ? "allow_safe_manual" : "route_command",
|
|
115
|
+
diagnostic_observations: ["Routed to a safe command-backed Release 1 action without dispatch authority."],
|
|
116
|
+
safe_next_actions: uniqueActions(safeActions),
|
|
117
|
+
user_message: "FlowDesk routed this hook attempt to safe Release 1 command-backed behavior.",
|
|
118
|
+
managed_automation_enabled: request.requested_capability !== "safe_manual",
|
|
119
|
+
mutation_applied: request.requested_capability !== "safe_manual",
|
|
120
|
+
denial_applied: false
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
export function evaluateFlowDeskHookHarnessV1(request) {
|
|
124
|
+
const response = buildFlowDeskHookHarnessResponseV1(request);
|
|
125
|
+
const responseResult = validateHookHarnessResponseV1(response);
|
|
126
|
+
if (!responseResult.ok)
|
|
127
|
+
return { ...invalid(...responseResult.errors), response };
|
|
128
|
+
return { ...valid(), response };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=hook-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-harness.js","sourceRoot":"","sources":["../src/hook-harness.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMnJ,MAAM,iBAAiB,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,wBAAwB,CAAU,CAAC;AACtG,MAAM,kBAAkB,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,wBAAwB,CAAU,CAAC;AACvG,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAA0B;IAC9D,uBAAuB;IACvB,eAAe;IACf,eAAe;IACf,aAAa;IACb,kBAAkB;IAClB,mBAAmB;CACpB,CAAC,CAAC;AACH,MAAM,sBAAsB,GAAG,icAAic,CAAC;AACje,MAAM,2BAA2B,GAAG,0LAA0L,CAAC;AAE/N,SAAS,aAAa,CAAC,OAAkC;IACvD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0D;IACpF,MAAM,SAAS,GAAG,OAAO,EAAE,oBAAoB,CAAC;IAChD,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,iBAAiB,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACnI,CAAC;AAED,SAAS,YAAY,CAAC,OAA0D,EAAE,MAAwP;IACxU,OAAO;QACL,cAAc,EAAE,mCAAmC;QACnD,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,IAAI,kBAAkB,CAAC,CAAC,CAAC,kBAAkB;QACnI,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,KAAK,SAAS,IAAI,OAAO,EAAE,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;QAC3I,oBAAoB,EAAE,kBAAkB,CAAC,OAAO,CAAC;QACjD,6BAA6B,EAAE,KAAK;QACpC,mBAAmB,EAAE,KAAK;QAC1B,cAAc,EAAE,KAAK;QACrB,mBAAmB,EAAE,KAAK;QAC1B,mBAAmB,EAAE,KAAK;QAC1B,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA0D;IACtF,OAAO,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,EAAE;QAChE,EAAE,EAAE,KAAK;QACT,QAAQ,EAAE,MAAM;QAChB,uBAAuB,EAAE,CAAC,uDAAuD,CAAC;QAClF,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,CAAC;QACzC,YAAY,EAAE,yGAAyG;QACvH,0BAA0B,EAAE,KAAK;QACjC,gBAAgB,EAAE,KAAK;QACvB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,UAAmC;IAClF,IAAI,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnF,IAAI,qDAAqD,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrG,IAAI,wCAAwC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAC5G,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;IAC3F,IAAI,4CAA4C,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;IAC/G,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IAC7F,IAAI,qDAAqD,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;IAC/H,IAAI,UAAU,KAAK,cAAc,IAAI,UAAU,KAAK,qBAAqB;QAAE,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IACzH,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAqC;IAC9D,OAAO,OAAO,CAAC,oBAAoB,KAAK,SAAS,IAAI,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACrO,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAqC;IACzE,OAAO,OAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,CAAC,oBAAoB,KAAK,aAAa,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC;AAC5I,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,OAAqC;IACtF,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC,EAAE;QAAE,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEpF,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,YAAY,CAAC,OAAO,EAAE;YAC3B,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,SAAS;YACnB,uBAAuB,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,uFAAuF,CAAC,CAAC,CAAC,mDAAmD,CAAC;YACrM,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,CAAC;YACzC,YAAY,EAAE,uHAAuH;YACrI,0BAA0B,EAAE,KAAK;YACjC,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC,OAAO,EAAE;YAC3B,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,cAAc;YACxB,uBAAuB,EAAE,CAAC,yFAAyF,CAAC;YACpH,iBAAiB,EAAE,CAAC,GAAG,kBAAkB,CAAC;YAC1C,YAAY,EAAE,qHAAqH;YACnI,0BAA0B,EAAE,KAAK;YACjC,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC;QACxE,OAAO,YAAY,CAAC,OAAO,EAAE;YAC3B,EAAE,EAAE,KAAK;YACT,QAAQ,EAAE,MAAM;YAChB,uBAAuB,EAAE,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,8DAA8D,CAAC,CAAC,CAAC,0FAA0F,CAAC;YAC9N,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,CAAC;YACzC,YAAY,EAAE,0JAA0J;YACxK,0BAA0B,EAAE,KAAK;YACjC,gBAAgB,EAAE,KAAK;YACvB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClG,OAAO,YAAY,CAAC,OAAO,EAAE;QAC3B,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,OAAO,CAAC,oBAAoB,KAAK,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe;QAChG,uBAAuB,EAAE,CAAC,8EAA8E,CAAC;QACzG,iBAAiB,EAAE,aAAa,CAAC,WAAW,CAAC;QAC7C,YAAY,EAAE,8EAA8E;QAC5F,0BAA0B,EAAE,OAAO,CAAC,oBAAoB,KAAK,aAAa;QAC1E,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,KAAK,aAAa;QAChE,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAqC;IACjF,MAAM,QAAQ,GAAG,kCAAkC,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,CAAC,cAAc,CAAC,EAAE;QAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClF,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const flowdeskCorePackageName: "@flowdesk/core";
|
|
2
|
+
export declare const flowdeskRelease1Scope: readonly ["guarded-command-backed-workflows", "dry-run", "fake-runtime", "redacted-audit-debug", "no-real-dispatch"];
|
|
3
|
+
export declare const flowdeskNoRealDispatchBoundary: {
|
|
4
|
+
readonly releaseGate: "release1-general-use-mvp";
|
|
5
|
+
readonly realOpenCodeDispatch: "disabled";
|
|
6
|
+
readonly providerModelFallback: "disabled";
|
|
7
|
+
readonly hardChatCancelOrNoReply: "disabled";
|
|
8
|
+
readonly cliSubprocessDispatch: "disabled";
|
|
9
|
+
};
|
|
10
|
+
export declare function describeFlowDeskCoreScaffold(): string;
|
|
11
|
+
export declare function canUseRealDispatchInRelease1(): false;
|
|
12
|
+
export * from "./agent-profiles.js";
|
|
13
|
+
export * from "./audit.js";
|
|
14
|
+
export * from "./bootstrap-foundation.js";
|
|
15
|
+
export * from "./chat-routing.js";
|
|
16
|
+
export * from "./command-manifest.js";
|
|
17
|
+
export * from "./config-policy.js";
|
|
18
|
+
export * from "./fake-runtime.js";
|
|
19
|
+
export * from "./guard-boundary.js";
|
|
20
|
+
export * from "./guarded-dry-run.js";
|
|
21
|
+
export * from "./hook-harness.js";
|
|
22
|
+
export * from "./lane-observability.js";
|
|
23
|
+
export * from "./plan.js";
|
|
24
|
+
export * from "./production-enablement.js";
|
|
25
|
+
export * from "./provider-failures.js";
|
|
26
|
+
export * from "./provider-usage-collector.js";
|
|
27
|
+
export * from "./redaction.js";
|
|
28
|
+
export * from "./release1-contracts.js";
|
|
29
|
+
export * from "./retry.js";
|
|
30
|
+
export * from "./reviewer-lane-conformance.js";
|
|
31
|
+
export * from "./schema-artifacts.js";
|
|
32
|
+
export * from "./schema-registry.js";
|
|
33
|
+
export * from "./session-evidence.js";
|
|
34
|
+
export * from "./state-paths.js";
|
|
35
|
+
export * from "./state-store.js";
|
|
36
|
+
export * from "./status.js";
|
|
37
|
+
export * from "./tool-contract-fixtures.js";
|
|
38
|
+
export * from "./top-tier-reviewer-lane-probe.js";
|
|
39
|
+
export * from "./usage-health.js";
|
|
40
|
+
export * from "./validators.js";
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAAG,gBAAyB,CAAC;AAEjE,eAAO,MAAM,qBAAqB,sHAMxB,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;;CAMjC,CAAC;AAEX,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,4BAA4B,IAAI,KAAK,CAEpD;AAED,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export const flowdeskCorePackageName = "@flowdesk/core";
|
|
2
|
+
export const flowdeskRelease1Scope = [
|
|
3
|
+
"guarded-command-backed-workflows",
|
|
4
|
+
"dry-run",
|
|
5
|
+
"fake-runtime",
|
|
6
|
+
"redacted-audit-debug",
|
|
7
|
+
"no-real-dispatch",
|
|
8
|
+
];
|
|
9
|
+
export const flowdeskNoRealDispatchBoundary = {
|
|
10
|
+
releaseGate: "release1-general-use-mvp",
|
|
11
|
+
realOpenCodeDispatch: "disabled",
|
|
12
|
+
providerModelFallback: "disabled",
|
|
13
|
+
hardChatCancelOrNoReply: "disabled",
|
|
14
|
+
cliSubprocessDispatch: "disabled",
|
|
15
|
+
};
|
|
16
|
+
export function describeFlowDeskCoreScaffold() {
|
|
17
|
+
return `${flowdeskCorePackageName}: ${flowdeskNoRealDispatchBoundary.releaseGate}`;
|
|
18
|
+
}
|
|
19
|
+
export function canUseRealDispatchInRelease1() {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
export * from "./agent-profiles.js";
|
|
23
|
+
export * from "./audit.js";
|
|
24
|
+
export * from "./bootstrap-foundation.js";
|
|
25
|
+
export * from "./chat-routing.js";
|
|
26
|
+
export * from "./command-manifest.js";
|
|
27
|
+
export * from "./config-policy.js";
|
|
28
|
+
export * from "./fake-runtime.js";
|
|
29
|
+
export * from "./guard-boundary.js";
|
|
30
|
+
export * from "./guarded-dry-run.js";
|
|
31
|
+
export * from "./hook-harness.js";
|
|
32
|
+
export * from "./lane-observability.js";
|
|
33
|
+
export * from "./plan.js";
|
|
34
|
+
export * from "./production-enablement.js";
|
|
35
|
+
export * from "./provider-failures.js";
|
|
36
|
+
export * from "./provider-usage-collector.js";
|
|
37
|
+
export * from "./redaction.js";
|
|
38
|
+
export * from "./release1-contracts.js";
|
|
39
|
+
export * from "./retry.js";
|
|
40
|
+
export * from "./reviewer-lane-conformance.js";
|
|
41
|
+
export * from "./schema-artifacts.js";
|
|
42
|
+
export * from "./schema-registry.js";
|
|
43
|
+
export * from "./session-evidence.js";
|
|
44
|
+
export * from "./state-paths.js";
|
|
45
|
+
export * from "./state-store.js";
|
|
46
|
+
export * from "./status.js";
|
|
47
|
+
export * from "./tool-contract-fixtures.js";
|
|
48
|
+
export * from "./top-tier-reviewer-lane-probe.js";
|
|
49
|
+
export * from "./usage-health.js";
|
|
50
|
+
export * from "./validators.js";
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAyB,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,kCAAkC;IAClC,SAAS;IACT,cAAc;IACd,sBAAsB;IACtB,kBAAkB;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C,WAAW,EAAE,0BAA0B;IACvC,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,UAAU;IACjC,uBAAuB,EAAE,UAAU;IACnC,qBAAqB,EAAE,UAAU;CACxB,CAAC;AAEX,MAAM,UAAU,4BAA4B;IAC3C,OAAO,GAAG,uBAAuB,KAAK,8BAA8B,CAAC,WAAW,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FlowDeskLaneObservabilityArtifactV1, FlowDeskStatusLaneSummaryV1, LaneInspectionStateV1, LaneObservabilityLevelV1, SafeNextAction } from "./release1-contracts.js";
|
|
2
|
+
import { type ValidationResult } from "./validators.js";
|
|
3
|
+
export interface FlowDeskLaneObservabilityInputV1 {
|
|
4
|
+
observabilityId: string;
|
|
5
|
+
statusSummaryRef: string;
|
|
6
|
+
laneSummary: FlowDeskStatusLaneSummaryV1;
|
|
7
|
+
observabilityLevel?: LaneObservabilityLevelV1;
|
|
8
|
+
inspectionState?: LaneInspectionStateV1;
|
|
9
|
+
requestedBindingRef?: string;
|
|
10
|
+
observedBindingRef?: string;
|
|
11
|
+
parentSessionRef?: string;
|
|
12
|
+
childSessionRef?: string;
|
|
13
|
+
messageRef?: string;
|
|
14
|
+
outputRef?: string;
|
|
15
|
+
detailRef?: string;
|
|
16
|
+
debugRef?: string;
|
|
17
|
+
inspectActions?: SafeNextAction[];
|
|
18
|
+
redactionStatus?: FlowDeskLaneObservabilityArtifactV1["redaction_status"];
|
|
19
|
+
}
|
|
20
|
+
export declare function createFlowDeskLaneObservabilityArtifactV1(input: FlowDeskLaneObservabilityInputV1): FlowDeskLaneObservabilityArtifactV1;
|
|
21
|
+
export declare function validateFlowDeskLaneObservabilityArtifactV1(value: unknown): ValidationResult;
|
|
22
|
+
//# sourceMappingURL=lane-observability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-observability.d.ts","sourceRoot":"","sources":["../src/lane-observability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mCAAmC,EACnC,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,EACd,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAEN,KAAK,gBAAgB,EAKrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,gCAAgC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,2BAA2B,CAAC;IACzC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,mCAAmC,CAAC,kBAAkB,CAAC,CAAC;CAC1E;AAqBD,wBAAgB,yCAAyC,CACxD,KAAK,EAAE,gCAAgC,GACrC,mCAAmC,CAsCrC;AAED,wBAAgB,2CAA2C,CAC1D,KAAK,EAAE,OAAO,GACZ,gBAAgB,CA4FlB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { LANE_INSPECTION_STATES, LANE_OBSERVABILITY_LEVELS, PERSISTED_LANE_STATES, SAFE_NEXT_ACTIONS, } from "./release1-contracts.js";
|
|
2
|
+
import { invalid, valid, validateNoForbiddenRawPayloads, validateOpaqueId, validateOpaqueRef, } from "./validators.js";
|
|
3
|
+
const DEFAULT_INSPECT_ACTIONS = [
|
|
4
|
+
"/flowdesk-status",
|
|
5
|
+
"/flowdesk-export-debug",
|
|
6
|
+
];
|
|
7
|
+
function uniqueActions(actions) {
|
|
8
|
+
return [...new Set(actions)].slice(0, 8);
|
|
9
|
+
}
|
|
10
|
+
function optionalRef(value, label, errors) {
|
|
11
|
+
if (value === undefined)
|
|
12
|
+
return false;
|
|
13
|
+
errors.push(...validateOpaqueRef(value, label).errors);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
export function createFlowDeskLaneObservabilityArtifactV1(input) {
|
|
17
|
+
const inspectActions = uniqueActions(input.inspectActions ?? DEFAULT_INSPECT_ACTIONS);
|
|
18
|
+
const debugRef = input.debugRef ?? input.laneSummary.debug_ref;
|
|
19
|
+
return {
|
|
20
|
+
schema_version: "flowdesk.lane_observability.v1",
|
|
21
|
+
observability_id: input.observabilityId,
|
|
22
|
+
workflow_id: input.laneSummary.workflow_id,
|
|
23
|
+
lane_id: input.laneSummary.lane_id,
|
|
24
|
+
status_summary_ref: input.statusSummaryRef,
|
|
25
|
+
observability_level: input.observabilityLevel ?? "openable_refs",
|
|
26
|
+
inspection_state: input.inspectionState ?? "inspectable",
|
|
27
|
+
lane_state: input.laneSummary
|
|
28
|
+
.state,
|
|
29
|
+
...(input.requestedBindingRef === undefined
|
|
30
|
+
? {}
|
|
31
|
+
: { requested_binding_ref: input.requestedBindingRef }),
|
|
32
|
+
...(input.observedBindingRef === undefined
|
|
33
|
+
? {}
|
|
34
|
+
: { observed_binding_ref: input.observedBindingRef }),
|
|
35
|
+
...(input.parentSessionRef === undefined
|
|
36
|
+
? {}
|
|
37
|
+
: { parent_session_ref: input.parentSessionRef }),
|
|
38
|
+
...(input.childSessionRef === undefined
|
|
39
|
+
? {}
|
|
40
|
+
: { child_session_ref: input.childSessionRef }),
|
|
41
|
+
...(input.messageRef === undefined ? {} : { message_ref: input.messageRef }),
|
|
42
|
+
...(input.outputRef === undefined ? {} : { output_ref: input.outputRef }),
|
|
43
|
+
...(input.detailRef === undefined ? {} : { detail_ref: input.detailRef }),
|
|
44
|
+
...(debugRef === undefined ? {} : { debug_ref: debugRef }),
|
|
45
|
+
inspect_actions: inspectActions,
|
|
46
|
+
redaction_status: input.redactionStatus ?? "passed",
|
|
47
|
+
created_at: input.laneSummary.created_at,
|
|
48
|
+
updated_at: input.laneSummary.updated_at,
|
|
49
|
+
dispatch_authority_enabled: false,
|
|
50
|
+
provider_call_made: false,
|
|
51
|
+
runtime_execution: false,
|
|
52
|
+
hard_chat_authority_claimed: false,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function validateFlowDeskLaneObservabilityArtifactV1(value) {
|
|
56
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
57
|
+
return invalid("lane observability artifact must be an object");
|
|
58
|
+
const record = value;
|
|
59
|
+
const errors = [];
|
|
60
|
+
const allowed = new Set([
|
|
61
|
+
"schema_version",
|
|
62
|
+
"observability_id",
|
|
63
|
+
"workflow_id",
|
|
64
|
+
"lane_id",
|
|
65
|
+
"status_summary_ref",
|
|
66
|
+
"observability_level",
|
|
67
|
+
"inspection_state",
|
|
68
|
+
"lane_state",
|
|
69
|
+
"requested_binding_ref",
|
|
70
|
+
"observed_binding_ref",
|
|
71
|
+
"parent_session_ref",
|
|
72
|
+
"child_session_ref",
|
|
73
|
+
"message_ref",
|
|
74
|
+
"output_ref",
|
|
75
|
+
"detail_ref",
|
|
76
|
+
"debug_ref",
|
|
77
|
+
"inspect_actions",
|
|
78
|
+
"redaction_status",
|
|
79
|
+
"created_at",
|
|
80
|
+
"updated_at",
|
|
81
|
+
"dispatch_authority_enabled",
|
|
82
|
+
"provider_call_made",
|
|
83
|
+
"runtime_execution",
|
|
84
|
+
"hard_chat_authority_claimed",
|
|
85
|
+
]);
|
|
86
|
+
for (const key of Object.keys(record))
|
|
87
|
+
if (!allowed.has(key))
|
|
88
|
+
errors.push(`unknown properties: ${key}`);
|
|
89
|
+
if (record.schema_version !== "flowdesk.lane_observability.v1")
|
|
90
|
+
errors.push("lane observability schema_version is invalid");
|
|
91
|
+
errors.push(...validateOpaqueId(record.observability_id, "observability_id").errors, ...validateOpaqueId(record.workflow_id, "workflow_id").errors, ...validateOpaqueId(record.lane_id, "lane_id").errors, ...validateOpaqueRef(record.status_summary_ref, "status_summary_ref").errors);
|
|
92
|
+
if (!LANE_OBSERVABILITY_LEVELS.includes(record.observability_level))
|
|
93
|
+
errors.push("observability_level is invalid");
|
|
94
|
+
if (!LANE_INSPECTION_STATES.includes(record.inspection_state))
|
|
95
|
+
errors.push("inspection_state is invalid");
|
|
96
|
+
if (!PERSISTED_LANE_STATES.includes(record.lane_state))
|
|
97
|
+
errors.push("lane_state is invalid or future-gated");
|
|
98
|
+
for (const [value, label] of [
|
|
99
|
+
[record.requested_binding_ref, "requested_binding_ref"],
|
|
100
|
+
[record.observed_binding_ref, "observed_binding_ref"],
|
|
101
|
+
[record.parent_session_ref, "parent_session_ref"],
|
|
102
|
+
[record.child_session_ref, "child_session_ref"],
|
|
103
|
+
[record.message_ref, "message_ref"],
|
|
104
|
+
[record.output_ref, "output_ref"],
|
|
105
|
+
[record.detail_ref, "detail_ref"],
|
|
106
|
+
[record.debug_ref, "debug_ref"],
|
|
107
|
+
]) {
|
|
108
|
+
optionalRef(value, label, errors);
|
|
109
|
+
}
|
|
110
|
+
if (!Array.isArray(record.inspect_actions))
|
|
111
|
+
errors.push("inspect_actions must be an array");
|
|
112
|
+
else {
|
|
113
|
+
if (record.inspect_actions.length === 0 || record.inspect_actions.length > 8)
|
|
114
|
+
errors.push("inspect_actions must contain 1..8 actions");
|
|
115
|
+
for (const action of record.inspect_actions)
|
|
116
|
+
if (!SAFE_NEXT_ACTIONS.includes(action))
|
|
117
|
+
errors.push(`inspect_action is invalid: ${action}`);
|
|
118
|
+
}
|
|
119
|
+
if (!["passed", "partial", "blocked"].includes(record.redaction_status ?? ""))
|
|
120
|
+
errors.push("redaction_status is invalid");
|
|
121
|
+
if (typeof record.created_at !== "string" ||
|
|
122
|
+
!Number.isFinite(Date.parse(record.created_at)))
|
|
123
|
+
errors.push("created_at must be parseable");
|
|
124
|
+
if (typeof record.updated_at !== "string" ||
|
|
125
|
+
!Number.isFinite(Date.parse(record.updated_at)))
|
|
126
|
+
errors.push("updated_at must be parseable");
|
|
127
|
+
if (record.dispatch_authority_enabled !== false)
|
|
128
|
+
errors.push("lane observability cannot enable dispatch authority");
|
|
129
|
+
if (record.provider_call_made !== false)
|
|
130
|
+
errors.push("lane observability cannot claim provider calls");
|
|
131
|
+
if (record.runtime_execution !== false)
|
|
132
|
+
errors.push("lane observability cannot claim runtime execution");
|
|
133
|
+
if (record.hard_chat_authority_claimed !== false)
|
|
134
|
+
errors.push("lane observability cannot claim hard chat authority");
|
|
135
|
+
errors.push(...validateNoForbiddenRawPayloads(record, "lane_observability").errors);
|
|
136
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=lane-observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lane-observability.js","sourceRoot":"","sources":["../src/lane-observability.ts"],"names":[],"mappings":"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"}
|