@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,163 @@
|
|
|
1
|
+
const minimum = "registered_minimum";
|
|
2
|
+
const optional = "optional_diagnostic_unregistered";
|
|
3
|
+
const later = "later_release_unregistered";
|
|
4
|
+
const artifactOnly = "schema_artifact_only";
|
|
5
|
+
const runtimeClosedToolCompatibility = {
|
|
6
|
+
redactedErrorShapeId: "flowdesk.redacted_error.v1",
|
|
7
|
+
schemaCompatibilityStatus: "compatible_runtime_closed_validation",
|
|
8
|
+
schemaCompatibilityReadiness: "compatible_with_runtime_closed_validation"
|
|
9
|
+
};
|
|
10
|
+
const toolContracts = {
|
|
11
|
+
flowdesk_chat_intake: { privilegeClass: "internal_diagnostic", statePreconditions: ["redacted intake only", "chat steering conformance when used"], stateOutputs: ["redacted intake ref", "route decision"] },
|
|
12
|
+
flowdesk_doctor: { privilegeClass: "safe_read_only", statePreconditions: ["schema-valid request", "redacted refs only"], stateOutputs: ["doctor section results", "provider health summary", "compatibility ref"] },
|
|
13
|
+
flowdesk_plan: { privilegeClass: "privileged_non_dispatch", statePreconditions: ["state write permission when persisted", "audit write permission", "no dispatch"], stateOutputs: ["plan revision id", "guard precheck", "required approvals"] },
|
|
14
|
+
flowdesk_run: { privilegeClass: "privileged_release1_dry_run_or_fake_runtime", statePreconditions: ["Guard approval for dry-run or fake-runtime", "pre-run audit", "Release 1 run mode only"], stateOutputs: ["run result ref", "verification summary ref", "artifact disposition"] },
|
|
15
|
+
flowdesk_status: { privilegeClass: "safe_read_only", statePreconditions: ["workflow state readable", "redacted refs only"], stateOutputs: ["workflow state", "lane summaries", "blocker", "checkpoint id"] },
|
|
16
|
+
flowdesk_resume: { privilegeClass: "privileged_non_dispatch", statePreconditions: ["durable checkpoint", "fresh checks", "no event-only checkpoint"], stateOutputs: ["resume decision", "required fresh checks", "next checkpoint id"] },
|
|
17
|
+
flowdesk_retry: { privilegeClass: "privileged_non_dispatch", statePreconditions: ["existing attempt", "new attempt id", "Guard-compatible binding"], stateOutputs: ["new attempt id", "required guard checks", "retry state"] },
|
|
18
|
+
flowdesk_abort: { privilegeClass: "privileged_non_dispatch", statePreconditions: ["workflow id", "audit write when state changes", "best-effort cancellation only"], stateOutputs: ["requested/observed/failed cancellation state", "remaining safe actions"] },
|
|
19
|
+
flowdesk_usage: { privilegeClass: "safe_read_only", statePreconditions: ["provider family", "usage write permission when refresh persists"], stateOutputs: ["usage snapshot ref", "provider health snapshot ref", "freshness", "dispatchability"] },
|
|
20
|
+
flowdesk_explain_route: { privilegeClass: "safe_read_only", statePreconditions: ["existing workflow", "redacted route ref"], stateOutputs: ["route summary", "guard rationale ref"] },
|
|
21
|
+
flowdesk_audit: { privilegeClass: "safe_read_only", statePreconditions: ["existing workflow", "redacted audit query"], stateOutputs: ["audit refs", "summary labels", "redaction version"] },
|
|
22
|
+
flowdesk_export_debug: { privilegeClass: "privileged_non_dispatch", statePreconditions: ["debug export write permission", "redaction passes", "retention policy"], stateOutputs: ["export manifest ref", "included redacted sections", "delete after"] }
|
|
23
|
+
};
|
|
24
|
+
function toolContract(toolName) {
|
|
25
|
+
return { ...runtimeClosedToolCompatibility, ...toolContracts[toolName] };
|
|
26
|
+
}
|
|
27
|
+
function toolEntry(toolName, schemaId, fixturePrefix, interfaceName, kind, status, release1MinimumTool) {
|
|
28
|
+
return {
|
|
29
|
+
schemaId,
|
|
30
|
+
fixturePrefix,
|
|
31
|
+
interfaceName,
|
|
32
|
+
kind,
|
|
33
|
+
productionRegistrationEligible: release1MinimumTool,
|
|
34
|
+
release1MinimumTool,
|
|
35
|
+
registrationStatus: status,
|
|
36
|
+
toolName,
|
|
37
|
+
toolContract: toolContract(toolName)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function artifactEntry(schemaId, fixturePrefix, interfaceName, kind) {
|
|
41
|
+
return {
|
|
42
|
+
schemaId,
|
|
43
|
+
fixturePrefix,
|
|
44
|
+
interfaceName,
|
|
45
|
+
kind,
|
|
46
|
+
productionRegistrationEligible: false,
|
|
47
|
+
release1MinimumTool: false,
|
|
48
|
+
registrationStatus: artifactOnly
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export const RELEASE_1_PRODUCTION_MINIMUM_TOOL_NAMES = [
|
|
52
|
+
"flowdesk_doctor",
|
|
53
|
+
"flowdesk_plan",
|
|
54
|
+
"flowdesk_run",
|
|
55
|
+
"flowdesk_status",
|
|
56
|
+
"flowdesk_resume",
|
|
57
|
+
"flowdesk_retry",
|
|
58
|
+
"flowdesk_abort",
|
|
59
|
+
"flowdesk_usage",
|
|
60
|
+
"flowdesk_export_debug"
|
|
61
|
+
];
|
|
62
|
+
export const RELEASE_1_OPTIONAL_DIAGNOSTIC_TOOL_NAMES = ["flowdesk_chat_intake", "flowdesk_explain_route", "flowdesk_audit"];
|
|
63
|
+
export const RELEASE_1_LATER_RELEASE_TOOL_NAMES = ["flowdesk_reference_search"];
|
|
64
|
+
export const RELEASE_1_SCHEMA_REGISTRY = [
|
|
65
|
+
artifactEntry("flowdesk.tool.request.v1", "tool-request-envelope", "FlowDeskToolRequestEnvelopeV1", "envelope"),
|
|
66
|
+
artifactEntry("flowdesk.tool.response.v1", "tool-response-envelope", "FlowDeskToolResponseEnvelopeV1", "envelope"),
|
|
67
|
+
artifactEntry("flowdesk.redacted_error.v1", "redacted-error", "FlowDeskRedactedErrorV1", "envelope"),
|
|
68
|
+
toolEntry("flowdesk_chat_intake", "flowdesk.chat_intake.request.v1", "chat-intake", "FlowDeskChatIntakeRequestV1", "tool_request", optional, false),
|
|
69
|
+
toolEntry("flowdesk_chat_intake", "flowdesk.chat_intake.response.v1", "chat-intake", "FlowDeskChatIntakeResponseV1", "tool_response", optional, false),
|
|
70
|
+
artifactEntry("flowdesk.hook_harness.request.v1", "hook-harness-request", "FlowDeskHookHarnessRequestV1", "supporting"),
|
|
71
|
+
artifactEntry("flowdesk.hook_harness.response.v1", "hook-harness-response", "FlowDeskHookHarnessResponseV1", "supporting"),
|
|
72
|
+
toolEntry("flowdesk_doctor", "flowdesk.doctor.request.v1", "doctor", "FlowDeskDoctorRequestV1", "tool_request", minimum, true),
|
|
73
|
+
toolEntry("flowdesk_doctor", "flowdesk.doctor.response.v1", "doctor", "FlowDeskDoctorResponseV1", "tool_response", minimum, true),
|
|
74
|
+
toolEntry("flowdesk_plan", "flowdesk.plan.request.v1", "plan", "FlowDeskPlanRequestV1", "tool_request", minimum, true),
|
|
75
|
+
toolEntry("flowdesk_plan", "flowdesk.plan.response.v1", "plan", "FlowDeskPlanResponseV1", "tool_response", minimum, true),
|
|
76
|
+
toolEntry("flowdesk_run", "flowdesk.run.request.v1", "run", "FlowDeskRunRequestV1", "tool_request", minimum, true),
|
|
77
|
+
toolEntry("flowdesk_run", "flowdesk.run.response.v1", "run", "FlowDeskRunResponseV1", "tool_response", minimum, true),
|
|
78
|
+
toolEntry("flowdesk_status", "flowdesk.status.request.v1", "status", "FlowDeskStatusRequestV1", "tool_request", minimum, true),
|
|
79
|
+
toolEntry("flowdesk_status", "flowdesk.status.response.v1", "status", "FlowDeskStatusResponseV1", "tool_response", minimum, true),
|
|
80
|
+
toolEntry("flowdesk_resume", "flowdesk.resume.request.v1", "resume", "FlowDeskResumeRequestV1", "tool_request", minimum, true),
|
|
81
|
+
toolEntry("flowdesk_resume", "flowdesk.resume.response.v1", "resume", "FlowDeskResumeResponseV1", "tool_response", minimum, true),
|
|
82
|
+
toolEntry("flowdesk_retry", "flowdesk.retry.request.v1", "retry", "FlowDeskRetryRequestV1", "tool_request", minimum, true),
|
|
83
|
+
toolEntry("flowdesk_retry", "flowdesk.retry.response.v1", "retry", "FlowDeskRetryResponseV1", "tool_response", minimum, true),
|
|
84
|
+
toolEntry("flowdesk_abort", "flowdesk.abort.request.v1", "abort", "FlowDeskAbortRequestV1", "tool_request", minimum, true),
|
|
85
|
+
toolEntry("flowdesk_abort", "flowdesk.abort.response.v1", "abort", "FlowDeskAbortResponseV1", "tool_response", minimum, true),
|
|
86
|
+
toolEntry("flowdesk_usage", "flowdesk.usage.request.v1", "usage", "FlowDeskUsageRequestV1", "tool_request", minimum, true),
|
|
87
|
+
toolEntry("flowdesk_usage", "flowdesk.usage.response.v1", "usage", "FlowDeskUsageResponseV1", "tool_response", minimum, true),
|
|
88
|
+
toolEntry("flowdesk_explain_route", "flowdesk.explain_route.request.v1", "explain-route", "FlowDeskExplainRouteRequestV1", "tool_request", optional, false),
|
|
89
|
+
toolEntry("flowdesk_explain_route", "flowdesk.explain_route.response.v1", "explain-route", "FlowDeskExplainRouteResponseV1", "tool_response", optional, false),
|
|
90
|
+
toolEntry("flowdesk_audit", "flowdesk.audit.request.v1", "audit", "FlowDeskAuditRequestV1", "tool_request", optional, false),
|
|
91
|
+
toolEntry("flowdesk_audit", "flowdesk.audit.response.v1", "audit", "FlowDeskAuditResponseV1", "tool_response", optional, false),
|
|
92
|
+
toolEntry("flowdesk_export_debug", "flowdesk.export_debug.request.v1", "export-debug", "FlowDeskExportDebugRequestV1", "tool_request", minimum, true),
|
|
93
|
+
toolEntry("flowdesk_export_debug", "flowdesk.export_debug.response.v1", "export-debug", "FlowDeskExportDebugResponseV1", "tool_response", minimum, true),
|
|
94
|
+
artifactEntry("flowdesk.doctor_section_result.v1", "doctor-section-result", "DoctorSectionResultV1", "supporting"),
|
|
95
|
+
artifactEntry("flowdesk.doctor_report.v1", "doctor-report", "FlowDeskDoctorReportV1", "supporting"),
|
|
96
|
+
artifactEntry("flowdesk.status_summary.v1", "status-summary", "FlowDeskStatusSummaryArtifactV1", "supporting"),
|
|
97
|
+
artifactEntry("flowdesk.plan_summary.v1", "plan-summary", "FlowDeskPlanSummaryArtifactV1", "supporting"),
|
|
98
|
+
artifactEntry("flowdesk.lane_summary.v1", "lane-summary", "FlowDeskLaneSummaryArtifactV1", "supporting"),
|
|
99
|
+
artifactEntry("flowdesk.verification_summary.v1", "verification-summary", "FlowDeskVerificationSummaryArtifactV1", "supporting"),
|
|
100
|
+
artifactEntry("flowdesk.usage_snapshot.v1", "usage-snapshot", "FlowDeskUsageSnapshotV1", "supporting"),
|
|
101
|
+
artifactEntry("flowdesk.provider_health_snapshot.v1", "provider-health-snapshot", "FlowDeskProviderHealthSnapshotV1", "supporting"),
|
|
102
|
+
artifactEntry("flowdesk.debug_section_summary.v1", "debug-section-summary", "DebugSectionSummaryV1", "supporting"),
|
|
103
|
+
artifactEntry("flowdesk.audit_ref_summary.v1", "audit-ref-summary", "FlowDeskAuditRefSummaryV1", "audit"),
|
|
104
|
+
artifactEntry("flowdesk.audit_event.v1", "audit-event", "FlowDeskAuditEventV1", "audit"),
|
|
105
|
+
artifactEntry("flowdesk.conformance_runtime_metadata.v1", "conformance-runtime-metadata", "FlowDeskConformanceRuntimeMetadataV1", "runtime"),
|
|
106
|
+
artifactEntry("flowdesk.conformance_evidence_record.v1", "conformance-evidence-record", "FlowDeskConformanceEvidenceRecordV1", "runtime"),
|
|
107
|
+
artifactEntry("flowdesk.workflow_active.v1", "workflow-active", "FlowDeskWorkflowActiveV1", "persisted_state"),
|
|
108
|
+
artifactEntry("flowdesk.workflow_record.v1", "workflow-record", "FlowDeskWorkflowRecordV1", "persisted_state"),
|
|
109
|
+
artifactEntry("flowdesk.attempt_record.v1", "attempt-record", "FlowDeskAttemptRecordV1", "persisted_state"),
|
|
110
|
+
artifactEntry("flowdesk.checkpoint_record.v1", "checkpoint-record", "FlowDeskCheckpointRecordV1", "persisted_state"),
|
|
111
|
+
artifactEntry("flowdesk.active_attempt_lock.v1", "active-attempt-lock", "FlowDeskActiveAttemptLockV1", "persisted_state"),
|
|
112
|
+
artifactEntry("flowdesk.lane_record.v1", "lane-record", "FlowDeskLaneRecordV1", "persisted_state"),
|
|
113
|
+
artifactEntry("flowdesk.audit_record.v1", "audit-record", "FlowDeskAuditRecordV1", "persisted_state"),
|
|
114
|
+
artifactEntry("flowdesk.debug_export_manifest.v1", "debug-export-manifest", "FlowDeskDebugExportManifestV1", "persisted_state"),
|
|
115
|
+
artifactEntry("flowdesk.project_config.v1", "project-config", "FlowDeskProjectConfigV1", "config_policy"),
|
|
116
|
+
artifactEntry("flowdesk.policy_pack.v1", "policy-pack", "FlowDeskPolicyPackV1", "config_policy"),
|
|
117
|
+
artifactEntry("flowdesk.effective_policy.v1", "effective-policy", "FlowDeskEffectivePolicyV1", "config_policy"),
|
|
118
|
+
artifactEntry("flowdesk.non_dispatch_permission.v1", "non-dispatch-permission", "FlowDeskNonDispatchPermissionV1", "config_policy"),
|
|
119
|
+
artifactEntry("flowdesk.bootstrap_install_plan.v1", "bootstrap-install-plan", "FlowDeskBootstrapInstallPlanV1", "bootstrap"),
|
|
120
|
+
artifactEntry("flowdesk.bootstrap_backup_manifest.v1", "bootstrap-backup-manifest", "FlowDeskBootstrapBackupManifestV1", "bootstrap"),
|
|
121
|
+
artifactEntry("flowdesk.profile_mutation_summary.v1", "profile-mutation-summary", "FlowDeskProfileMutationSummaryV1", "bootstrap"),
|
|
122
|
+
artifactEntry("flowdesk.omo_cleanup_summary.v1", "omo-cleanup-summary", "FlowDeskOmoCleanupSummaryV1", "bootstrap"),
|
|
123
|
+
artifactEntry("flowdesk.command_generation_summary.v1", "command-generation-summary", "FlowDeskCommandGenerationSummaryV1", "bootstrap"),
|
|
124
|
+
artifactEntry("flowdesk.config_scaffold_summary.v1", "config-scaffold-summary", "FlowDeskConfigScaffoldSummaryV1", "bootstrap"),
|
|
125
|
+
artifactEntry("flowdesk.bootstrap_rollback_plan.v1", "bootstrap-rollback-plan", "FlowDeskBootstrapRollbackPlanV1", "bootstrap"),
|
|
126
|
+
artifactEntry("flowdesk.bootstrap_rollback_result.v1", "bootstrap-rollback-result", "FlowDeskBootstrapRollbackResultV1", "bootstrap"),
|
|
127
|
+
artifactEntry("flowdesk.bootstrap_report.v1", "bootstrap-report", "FlowDeskBootstrapReportV1", "bootstrap"),
|
|
128
|
+
artifactEntry("flowdesk.doctor_handoff.v1", "doctor-handoff", "FlowDeskDoctorHandoffV1", "bootstrap"),
|
|
129
|
+
artifactEntry("flowdesk.guard_request.v1", "guard-request", "GuardRequestV1", "guard"),
|
|
130
|
+
artifactEntry("flowdesk.guard_response.v1", "guard-response", "GuardResponseV1", "guard"),
|
|
131
|
+
artifactEntry("flowdesk.guard_approved_dispatch.v1", "guard-approved-dispatch", "GuardApprovedDispatchV1", "guard"),
|
|
132
|
+
artifactEntry("flowdesk.runtime_capability_metadata.v1", "runtime-capability-metadata", "FlowDeskRuntimeCapabilityMetadataV1", "runtime"),
|
|
133
|
+
artifactEntry("flowdesk.workflow_plan.v1", "workflow-plan", "FlowDeskWorkflowPlanV1", "workflow"),
|
|
134
|
+
artifactEntry("flowdesk.top_tier_reviewer_binding.v1", "top-tier-reviewer-binding", "FlowDeskTopTierReviewerBindingV1", "later_release"),
|
|
135
|
+
artifactEntry("flowdesk.top_tier_reviewer_lane_plan.v1", "top-tier-reviewer-lane-plan", "FlowDeskTopTierReviewerLanePlanV1", "later_release"),
|
|
136
|
+
artifactEntry("flowdesk.top_tier_review_binding_inventory.v1", "top-tier-review-binding-inventory", "FlowDeskTopTierReviewBindingInventoryV1", "later_release"),
|
|
137
|
+
artifactEntry("flowdesk.top_tier_review_verdict.v1", "top-tier-review-verdict", "FlowDeskTopTierReviewVerdictV1", "later_release"),
|
|
138
|
+
artifactEntry("flowdesk.top_tier_reviewer_lane_probe.request.v1", "top-tier-reviewer-lane-probe-request", "FlowDeskTopTierReviewerLaneProbeRequestV1", "later_release"),
|
|
139
|
+
artifactEntry("flowdesk.top_tier_reviewer_lane_probe.result.v1", "top-tier-reviewer-lane-probe-result", "FlowDeskTopTierReviewerLaneProbeResultV1", "later_release"),
|
|
140
|
+
{
|
|
141
|
+
schemaId: "flowdesk.reference_search.request.v1",
|
|
142
|
+
fixturePrefix: "reference-search",
|
|
143
|
+
interfaceName: "FlowDeskReferenceSearchRequestV1",
|
|
144
|
+
kind: "later_release",
|
|
145
|
+
productionRegistrationEligible: false,
|
|
146
|
+
release1MinimumTool: false,
|
|
147
|
+
registrationStatus: later,
|
|
148
|
+
toolName: "flowdesk_reference_search"
|
|
149
|
+
}
|
|
150
|
+
];
|
|
151
|
+
export function getRelease1MinimumToolRegistry() {
|
|
152
|
+
return RELEASE_1_SCHEMA_REGISTRY.filter((entry) => entry.release1MinimumTool && entry.kind.startsWith("tool_"));
|
|
153
|
+
}
|
|
154
|
+
export function getRelease1ProductionToolRegistry() {
|
|
155
|
+
return RELEASE_1_SCHEMA_REGISTRY.filter((entry) => entry.productionRegistrationEligible && entry.kind.startsWith("tool_"));
|
|
156
|
+
}
|
|
157
|
+
export function getRelease1RegisteredToolNames() {
|
|
158
|
+
return [...new Set(getRelease1MinimumToolRegistry().map((entry) => entry.toolName).filter((toolName) => typeof toolName === "string"))];
|
|
159
|
+
}
|
|
160
|
+
export function getRelease1SchemaMetadata(schemaId) {
|
|
161
|
+
return RELEASE_1_SCHEMA_REGISTRY.find((entry) => entry.schemaId === schemaId);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=schema-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-registry.js","sourceRoot":"","sources":["../src/schema-registry.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAO,GAAG,oBAA6D,CAAC;AAC9E,MAAM,QAAQ,GAAG,kCAA2E,CAAC;AAC7F,MAAM,KAAK,GAAG,4BAAqE,CAAC;AACpF,MAAM,YAAY,GAAG,sBAA+D,CAAC;AAErF,MAAM,8BAA8B,GAAG;IACrC,oBAAoB,EAAE,4BAA4B;IAClD,yBAAyB,EAAE,sCAAsC;IACjE,4BAA4B,EAAE,2CAA2C;CACjE,CAAC;AAEX,MAAM,aAAa,GAAG;IACpB,oBAAoB,EAAE,EAAE,cAAc,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC,sBAAsB,EAAE,qCAAqC,CAAC,EAAE,YAAY,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,EAAE;IAC7M,eAAe,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,EAAE,YAAY,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,EAAE,mBAAmB,CAAC,EAAE;IACnN,aAAa,EAAE,EAAE,cAAc,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,CAAC,uCAAuC,EAAE,wBAAwB,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,EAAE;IAChP,YAAY,EAAE,EAAE,cAAc,EAAE,6CAA6C,EAAE,kBAAkB,EAAE,CAAC,4CAA4C,EAAE,eAAe,EAAE,yBAAyB,CAAC,EAAE,YAAY,EAAE,CAAC,gBAAgB,EAAE,0BAA0B,EAAE,sBAAsB,CAAC,EAAE;IACrR,eAAe,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,EAAE,YAAY,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE;IAC5M,eAAe,EAAE,EAAE,cAAc,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,CAAC,oBAAoB,EAAE,cAAc,EAAE,0BAA0B,CAAC,EAAE,YAAY,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB,CAAC,EAAE;IACxO,cAAc,EAAE,EAAE,cAAc,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,0BAA0B,CAAC,EAAE,YAAY,EAAE,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,aAAa,CAAC,EAAE;IAC/N,cAAc,EAAE,EAAE,cAAc,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,CAAC,aAAa,EAAE,gCAAgC,EAAE,+BAA+B,CAAC,EAAE,YAAY,EAAE,CAAC,8CAA8C,EAAE,wBAAwB,CAAC,EAAE;IAC/P,cAAc,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,iBAAiB,EAAE,8CAA8C,CAAC,EAAE,YAAY,EAAE,CAAC,oBAAoB,EAAE,8BAA8B,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE;IACnP,sBAAsB,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,EAAE,YAAY,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC,EAAE;IACrL,cAAc,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,EAAE;IAC5L,qBAAqB,EAAE,EAAE,cAAc,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,CAAC,+BAA+B,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAC,qBAAqB,EAAE,4BAA4B,EAAE,cAAc,CAAC,EAAE;CAChP,CAAC;AAIX,SAAS,YAAY,CAAC,QAAkB;IACtC,OAAO,EAAE,GAAG,8BAA8B,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS,CAChB,QAAkB,EAClB,QAAgB,EAChB,aAAqB,EACrB,aAAqB,EACrB,IAAsC,EACtC,MAAsC,EACtC,mBAA4B;IAE5B,OAAO;QACL,QAAQ;QACR,aAAa;QACb,aAAa;QACb,IAAI;QACJ,8BAA8B,EAAE,mBAAmB;QACnD,mBAAmB;QACnB,kBAAkB,EAAE,MAAM;QAC1B,QAAQ;QACR,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,aAAqB,EAAE,aAAqB,EAAE,IAAgC;IACrH,OAAO;QACL,QAAQ;QACR,aAAa;QACb,aAAa;QACb,IAAI;QACJ,8BAA8B,EAAE,KAAK;QACrC,mBAAmB,EAAE,KAAK;QAC1B,kBAAkB,EAAE,YAAY;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,iBAAiB;IACjB,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;CACf,CAAC;AAEX,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,CAAU,CAAC;AACtI,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,2BAA2B,CAAU,CAAC;AAEzF,MAAM,CAAC,MAAM,yBAAyB,GAA6B;IACjE,aAAa,CAAC,0BAA0B,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,UAAU,CAAC;IAC/G,aAAa,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,UAAU,CAAC;IAClH,aAAa,CAAC,4BAA4B,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,UAAU,CAAC;IAEpG,SAAS,CAAC,sBAAsB,EAAE,iCAAiC,EAAE,aAAa,EAAE,6BAA6B,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC;IACnJ,SAAS,CAAC,sBAAsB,EAAE,kCAAkC,EAAE,aAAa,EAAE,8BAA8B,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC;IACtJ,aAAa,CAAC,kCAAkC,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,YAAY,CAAC;IACvH,aAAa,CAAC,mCAAmC,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,YAAY,CAAC;IAC1H,SAAS,CAAC,iBAAiB,EAAE,4BAA4B,EAAE,QAAQ,EAAE,yBAAyB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAC9H,SAAS,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,QAAQ,EAAE,0BAA0B,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IACjI,SAAS,CAAC,eAAe,EAAE,0BAA0B,EAAE,MAAM,EAAE,uBAAuB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IACtH,SAAS,CAAC,eAAe,EAAE,2BAA2B,EAAE,MAAM,EAAE,wBAAwB,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IACzH,SAAS,CAAC,cAAc,EAAE,yBAAyB,EAAE,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAClH,SAAS,CAAC,cAAc,EAAE,0BAA0B,EAAE,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IACrH,SAAS,CAAC,iBAAiB,EAAE,4BAA4B,EAAE,QAAQ,EAAE,yBAAyB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAC9H,SAAS,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,QAAQ,EAAE,0BAA0B,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IACjI,SAAS,CAAC,iBAAiB,EAAE,4BAA4B,EAAE,QAAQ,EAAE,yBAAyB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAC9H,SAAS,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,QAAQ,EAAE,0BAA0B,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IACjI,SAAS,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAC1H,SAAS,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IAC7H,SAAS,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAC1H,SAAS,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IAC7H,SAAS,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IAC1H,SAAS,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IAC7H,SAAS,CAAC,wBAAwB,EAAE,mCAAmC,EAAE,eAAe,EAAE,+BAA+B,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC3J,SAAS,CAAC,wBAAwB,EAAE,oCAAoC,EAAE,eAAe,EAAE,gCAAgC,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC9J,SAAS,CAAC,gBAAgB,EAAE,2BAA2B,EAAE,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC5H,SAAS,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC/H,SAAS,CAAC,uBAAuB,EAAE,kCAAkC,EAAE,cAAc,EAAE,8BAA8B,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;IACrJ,SAAS,CAAC,uBAAuB,EAAE,mCAAmC,EAAE,cAAc,EAAE,+BAA+B,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;IAExJ,aAAa,CAAC,mCAAmC,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,YAAY,CAAC;IAClH,aAAa,CAAC,2BAA2B,EAAE,eAAe,EAAE,wBAAwB,EAAE,YAAY,CAAC;IACnG,aAAa,CAAC,4BAA4B,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,YAAY,CAAC;IAC9G,aAAa,CAAC,0BAA0B,EAAE,cAAc,EAAE,+BAA+B,EAAE,YAAY,CAAC;IACxG,aAAa,CAAC,0BAA0B,EAAE,cAAc,EAAE,+BAA+B,EAAE,YAAY,CAAC;IACxG,aAAa,CAAC,kCAAkC,EAAE,sBAAsB,EAAE,uCAAuC,EAAE,YAAY,CAAC;IAChI,aAAa,CAAC,4BAA4B,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,YAAY,CAAC;IACtG,aAAa,CAAC,sCAAsC,EAAE,0BAA0B,EAAE,kCAAkC,EAAE,YAAY,CAAC;IACnI,aAAa,CAAC,mCAAmC,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,YAAY,CAAC;IAClH,aAAa,CAAC,+BAA+B,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,OAAO,CAAC;IACzG,aAAa,CAAC,yBAAyB,EAAE,aAAa,EAAE,sBAAsB,EAAE,OAAO,CAAC;IACxF,aAAa,CAAC,0CAA0C,EAAE,8BAA8B,EAAE,sCAAsC,EAAE,SAAS,CAAC;IAC5I,aAAa,CAAC,yCAAyC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,SAAS,CAAC;IACzI,aAAa,CAAC,6BAA6B,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,iBAAiB,CAAC;IAC9G,aAAa,CAAC,6BAA6B,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,iBAAiB,CAAC;IAC9G,aAAa,CAAC,4BAA4B,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,iBAAiB,CAAC;IAC3G,aAAa,CAAC,+BAA+B,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,iBAAiB,CAAC;IACpH,aAAa,CAAC,iCAAiC,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,iBAAiB,CAAC;IACzH,aAAa,CAAC,yBAAyB,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,CAAC;IAClG,aAAa,CAAC,0BAA0B,EAAE,cAAc,EAAE,uBAAuB,EAAE,iBAAiB,CAAC;IACrG,aAAa,CAAC,mCAAmC,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,iBAAiB,CAAC;IAC/H,aAAa,CAAC,4BAA4B,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,eAAe,CAAC;IACzG,aAAa,CAAC,yBAAyB,EAAE,aAAa,EAAE,sBAAsB,EAAE,eAAe,CAAC;IAChG,aAAa,CAAC,8BAA8B,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,eAAe,CAAC;IAC/G,aAAa,CAAC,qCAAqC,EAAE,yBAAyB,EAAE,iCAAiC,EAAE,eAAe,CAAC;IACnI,aAAa,CAAC,oCAAoC,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,WAAW,CAAC;IAC5H,aAAa,CAAC,uCAAuC,EAAE,2BAA2B,EAAE,mCAAmC,EAAE,WAAW,CAAC;IACrI,aAAa,CAAC,sCAAsC,EAAE,0BAA0B,EAAE,kCAAkC,EAAE,WAAW,CAAC;IAClI,aAAa,CAAC,iCAAiC,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,WAAW,CAAC;IACnH,aAAa,CAAC,wCAAwC,EAAE,4BAA4B,EAAE,oCAAoC,EAAE,WAAW,CAAC;IACxI,aAAa,CAAC,qCAAqC,EAAE,yBAAyB,EAAE,iCAAiC,EAAE,WAAW,CAAC;IAC/H,aAAa,CAAC,qCAAqC,EAAE,yBAAyB,EAAE,iCAAiC,EAAE,WAAW,CAAC;IAC/H,aAAa,CAAC,uCAAuC,EAAE,2BAA2B,EAAE,mCAAmC,EAAE,WAAW,CAAC;IACrI,aAAa,CAAC,8BAA8B,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,WAAW,CAAC;IAC3G,aAAa,CAAC,4BAA4B,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,WAAW,CAAC;IACrG,aAAa,CAAC,2BAA2B,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,CAAC;IACtF,aAAa,CAAC,4BAA4B,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,OAAO,CAAC;IACzF,aAAa,CAAC,qCAAqC,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,OAAO,CAAC;IACnH,aAAa,CAAC,yCAAyC,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,SAAS,CAAC;IACzI,aAAa,CAAC,2BAA2B,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,CAAC;IACjG,aAAa,CAAC,uCAAuC,EAAE,2BAA2B,EAAE,kCAAkC,EAAE,eAAe,CAAC;IACxI,aAAa,CAAC,yCAAyC,EAAE,6BAA6B,EAAE,mCAAmC,EAAE,eAAe,CAAC;IAC7I,aAAa,CAAC,+CAA+C,EAAE,mCAAmC,EAAE,yCAAyC,EAAE,eAAe,CAAC;IAC/J,aAAa,CAAC,qCAAqC,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,eAAe,CAAC;IAClI,aAAa,CAAC,kDAAkD,EAAE,sCAAsC,EAAE,2CAA2C,EAAE,eAAe,CAAC;IACvK,aAAa,CAAC,iDAAiD,EAAE,qCAAqC,EAAE,0CAA0C,EAAE,eAAe,CAAC;IACpK;QACE,QAAQ,EAAE,sCAAsC;QAChD,aAAa,EAAE,kBAAkB;QACjC,aAAa,EAAE,kCAAkC;QACjD,IAAI,EAAE,eAAe;QACrB,8BAA8B,EAAE,KAAK;QACrC,mBAAmB,EAAE,KAAK;QAC1B,kBAAkB,EAAE,KAAK;QACzB,QAAQ,EAAE,2BAA2B;KACtC;CACF,CAAC;AAEF,MAAM,UAAU,8BAA8B;IAC5C,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAClH,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,8BAA8B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7H,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,8BAA8B,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAsB,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9J,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACxD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type FlowDeskSessionEvidenceClass } from "./state-paths.js";
|
|
2
|
+
import { type ValidationResult } from "./validators.js";
|
|
3
|
+
export interface FlowDeskSessionEvidenceWriteIntentV1 {
|
|
4
|
+
operation: "write_json";
|
|
5
|
+
authority: "redacted_session_support";
|
|
6
|
+
workflowId: string;
|
|
7
|
+
evidenceId: string;
|
|
8
|
+
evidenceClass: FlowDeskSessionEvidenceClass;
|
|
9
|
+
schemaId: string;
|
|
10
|
+
path: string;
|
|
11
|
+
tempPath: string;
|
|
12
|
+
record: Record<string, unknown>;
|
|
13
|
+
fsSafety: "validated_relative_flowdesk_path_only";
|
|
14
|
+
atomicity: {
|
|
15
|
+
strategy: "temp_then_rename_intent";
|
|
16
|
+
};
|
|
17
|
+
realOpenCodeDispatch: false;
|
|
18
|
+
actualLaneLaunch: false;
|
|
19
|
+
providerCall: false;
|
|
20
|
+
runtimeExecution: false;
|
|
21
|
+
}
|
|
22
|
+
export interface FlowDeskSessionEvidencePrepareResult extends ValidationResult {
|
|
23
|
+
writeIntent?: FlowDeskSessionEvidenceWriteIntentV1;
|
|
24
|
+
}
|
|
25
|
+
export interface FlowDeskSessionEvidenceReloadEntryV1 {
|
|
26
|
+
evidenceClass: FlowDeskSessionEvidenceClass;
|
|
27
|
+
evidenceId: string;
|
|
28
|
+
record: Record<string, unknown>;
|
|
29
|
+
path: string;
|
|
30
|
+
}
|
|
31
|
+
export interface FlowDeskSessionEvidenceReloadResultV1 extends ValidationResult {
|
|
32
|
+
entries: FlowDeskSessionEvidenceReloadEntryV1[];
|
|
33
|
+
blocked: Array<{
|
|
34
|
+
evidenceClass: FlowDeskSessionEvidenceClass;
|
|
35
|
+
evidenceId: string;
|
|
36
|
+
reason: string;
|
|
37
|
+
path: string;
|
|
38
|
+
}>;
|
|
39
|
+
realOpenCodeDispatch: false;
|
|
40
|
+
actualLaneLaunch: false;
|
|
41
|
+
providerCall: false;
|
|
42
|
+
runtimeExecution: false;
|
|
43
|
+
}
|
|
44
|
+
export interface FlowDeskSessionEvidenceApplyResultV1 extends ValidationResult {
|
|
45
|
+
rootDir?: string;
|
|
46
|
+
writtenPaths: string[];
|
|
47
|
+
realOpenCodeDispatch: false;
|
|
48
|
+
actualLaneLaunch: false;
|
|
49
|
+
providerCall: false;
|
|
50
|
+
runtimeExecution: false;
|
|
51
|
+
}
|
|
52
|
+
export declare function classifyFlowDeskSessionEvidenceRecord(record: unknown): {
|
|
53
|
+
ok: true;
|
|
54
|
+
evidenceClass: FlowDeskSessionEvidenceClass;
|
|
55
|
+
} | {
|
|
56
|
+
ok: false;
|
|
57
|
+
errors: string[];
|
|
58
|
+
};
|
|
59
|
+
export interface FlowDeskSessionEvidencePrepareInputV1 {
|
|
60
|
+
workflowId: string;
|
|
61
|
+
evidenceId: string;
|
|
62
|
+
record: unknown;
|
|
63
|
+
}
|
|
64
|
+
export declare function prepareFlowDeskSessionEvidenceWriteIntentV1(input: FlowDeskSessionEvidencePrepareInputV1): FlowDeskSessionEvidencePrepareResult;
|
|
65
|
+
export declare function applyFlowDeskSessionEvidenceWriteIntentsV1(rootDir: string, intents: readonly FlowDeskSessionEvidenceWriteIntentV1[]): FlowDeskSessionEvidenceApplyResultV1;
|
|
66
|
+
export interface FlowDeskSessionEvidenceReadOptionsV1 {
|
|
67
|
+
workflowId: string;
|
|
68
|
+
rootDir: string;
|
|
69
|
+
}
|
|
70
|
+
export declare function reloadFlowDeskSessionEvidenceV1(options: FlowDeskSessionEvidenceReadOptionsV1): FlowDeskSessionEvidenceReloadResultV1;
|
|
71
|
+
//# sourceMappingURL=session-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-evidence.d.ts","sourceRoot":"","sources":["../src/session-evidence.ts"],"names":[],"mappings":"AAUA,OAAO,EAEN,KAAK,4BAA4B,EAGjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,KAAK,gBAAgB,EAKrB,MAAM,iBAAiB,CAAC;AAkBzB,MAAM,WAAW,oCAAoC;IACpD,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,0BAA0B,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,uCAAuC,CAAC;IAClD,SAAS,EAAE;QAAE,QAAQ,EAAE,yBAAyB,CAAA;KAAE,CAAC;IACnD,oBAAoB,EAAE,KAAK,CAAC;IAC5B,gBAAgB,EAAE,KAAK,CAAC;IACxB,YAAY,EAAE,KAAK,CAAC;IACpB,gBAAgB,EAAE,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,oCAAqC,SAAQ,gBAAgB;IAC7E,WAAW,CAAC,EAAE,oCAAoC,CAAC;CACnD;AAED,MAAM,WAAW,oCAAoC;IACpD,aAAa,EAAE,4BAA4B,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qCAChB,SAAQ,gBAAgB;IACxB,OAAO,EAAE,oCAAoC,EAAE,CAAC;IAChD,OAAO,EAAE,KAAK,CAAC;QACd,aAAa,EAAE,4BAA4B,CAAC;QAC5C,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;IACH,oBAAoB,EAAE,KAAK,CAAC;IAC5B,gBAAgB,EAAE,KAAK,CAAC;IACxB,YAAY,EAAE,KAAK,CAAC;IACpB,gBAAgB,EAAE,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,oCAAqC,SAAQ,gBAAgB;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,KAAK,CAAC;IAC5B,gBAAgB,EAAE,KAAK,CAAC;IACxB,YAAY,EAAE,KAAK,CAAC;IACpB,gBAAgB,EAAE,KAAK,CAAC;CACxB;AA8CD,wBAAgB,qCAAqC,CACpD,MAAM,EAAE,OAAO,GAEb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,4BAA4B,CAAA;CAAE,GACzD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAejC;AAED,MAAM,WAAW,qCAAqC;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,2CAA2C,CAC1D,KAAK,EAAE,qCAAqC,GAC1C,oCAAoC,CAyCtC;AA8DD,wBAAgB,0CAA0C,CACzD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,oCAAoC,EAAE,GACtD,oCAAoC,CAmDtC;AAED,MAAM,WAAW,oCAAoC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,+BAA+B,CAC9C,OAAO,EAAE,oCAAoC,GAC3C,qCAAqC,CA4JvC"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname, resolve, sep } from "node:path";
|
|
3
|
+
import { FLOWDESK_SESSION_EVIDENCE_CLASSES, sessionEvidenceDirectoryPath, sessionEvidenceRecordPath, } from "./state-paths.js";
|
|
4
|
+
import { invalid, valid, validateNoForbiddenRawPayloads, validateOpaqueId, validateOpaqueRef, } from "./validators.js";
|
|
5
|
+
const EVIDENCE_SCHEMA_BY_CLASS = {
|
|
6
|
+
usage_authority: "flowdesk.managed_dispatch_beta.usage_authority_evidence.v1",
|
|
7
|
+
runtime_echo: "flowdesk.managed_dispatch_beta.runtime_echo_evidence.v1",
|
|
8
|
+
telemetry_correlation: "flowdesk.managed_dispatch_beta.telemetry_correlation.v1",
|
|
9
|
+
};
|
|
10
|
+
const CLASS_BY_SCHEMA = Object.fromEntries(Object.entries(EVIDENCE_SCHEMA_BY_CLASS).map(([cls, schema]) => [schema, cls]));
|
|
11
|
+
const disabledEvidenceAuthority = {
|
|
12
|
+
realOpenCodeDispatch: false,
|
|
13
|
+
actualLaneLaunch: false,
|
|
14
|
+
providerCall: false,
|
|
15
|
+
runtimeExecution: false,
|
|
16
|
+
};
|
|
17
|
+
function isRecordObject(value) {
|
|
18
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
19
|
+
}
|
|
20
|
+
function validateSchemaVersionForClass(record, evidenceClass) {
|
|
21
|
+
const expected = EVIDENCE_SCHEMA_BY_CLASS[evidenceClass];
|
|
22
|
+
return record.schema_version === expected
|
|
23
|
+
? valid()
|
|
24
|
+
: invalid(`evidence schema_version must be ${expected}`);
|
|
25
|
+
}
|
|
26
|
+
function validateEvidenceShape(record, evidenceClass) {
|
|
27
|
+
const schemaCheck = validateSchemaVersionForClass(record, evidenceClass);
|
|
28
|
+
if (!schemaCheck.ok)
|
|
29
|
+
return schemaCheck;
|
|
30
|
+
const requiredCommon = ["schema_version"];
|
|
31
|
+
for (const key of requiredCommon)
|
|
32
|
+
if (!(key in record))
|
|
33
|
+
return invalid(`evidence is missing required field: ${key}`);
|
|
34
|
+
return validateNoForbiddenRawPayloads(record, "session_evidence_record");
|
|
35
|
+
}
|
|
36
|
+
function ensureWorkflowAlignment(record, workflowId) {
|
|
37
|
+
if (!("workflow_id" in record))
|
|
38
|
+
return valid();
|
|
39
|
+
return record.workflow_id === workflowId
|
|
40
|
+
? valid()
|
|
41
|
+
: invalid(`evidence workflow_id mismatch: expected ${workflowId}`);
|
|
42
|
+
}
|
|
43
|
+
export function classifyFlowDeskSessionEvidenceRecord(record) {
|
|
44
|
+
if (!isRecordObject(record))
|
|
45
|
+
return { ok: false, errors: ["evidence must be an object"] };
|
|
46
|
+
const schema = record.schema_version;
|
|
47
|
+
if (typeof schema !== "string")
|
|
48
|
+
return { ok: false, errors: ["evidence schema_version must be a string"] };
|
|
49
|
+
const evidenceClass = CLASS_BY_SCHEMA[schema];
|
|
50
|
+
if (evidenceClass === undefined)
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
errors: [
|
|
54
|
+
`evidence schema_version is not a managed session evidence class: ${schema}`,
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
return { ok: true, evidenceClass };
|
|
58
|
+
}
|
|
59
|
+
export function prepareFlowDeskSessionEvidenceWriteIntentV1(input) {
|
|
60
|
+
const workflowResult = validateOpaqueId(input.workflowId, "workflow_id");
|
|
61
|
+
if (!workflowResult.ok)
|
|
62
|
+
return workflowResult;
|
|
63
|
+
const evidenceIdResult = validateOpaqueId(input.evidenceId, "evidence_id");
|
|
64
|
+
if (!evidenceIdResult.ok)
|
|
65
|
+
return evidenceIdResult;
|
|
66
|
+
const classification = classifyFlowDeskSessionEvidenceRecord(input.record);
|
|
67
|
+
if (!classification.ok)
|
|
68
|
+
return invalid(...classification.errors);
|
|
69
|
+
if (!isRecordObject(input.record))
|
|
70
|
+
return invalid("evidence must be an object");
|
|
71
|
+
const shapeResult = validateEvidenceShape(input.record, classification.evidenceClass);
|
|
72
|
+
if (!shapeResult.ok)
|
|
73
|
+
return shapeResult;
|
|
74
|
+
const workflowAlignment = ensureWorkflowAlignment(input.record, input.workflowId);
|
|
75
|
+
if (!workflowAlignment.ok)
|
|
76
|
+
return workflowAlignment;
|
|
77
|
+
const path = sessionEvidenceRecordPath(input.workflowId, classification.evidenceClass, input.evidenceId);
|
|
78
|
+
const schemaId = EVIDENCE_SCHEMA_BY_CLASS[classification.evidenceClass];
|
|
79
|
+
const tempPath = `${path}.tmp-${schemaId.replace(/[^A-Za-z0-9_.-]/g, "-")}`;
|
|
80
|
+
const writeIntent = {
|
|
81
|
+
operation: "write_json",
|
|
82
|
+
authority: "redacted_session_support",
|
|
83
|
+
workflowId: input.workflowId,
|
|
84
|
+
evidenceId: input.evidenceId,
|
|
85
|
+
evidenceClass: classification.evidenceClass,
|
|
86
|
+
schemaId,
|
|
87
|
+
path,
|
|
88
|
+
tempPath,
|
|
89
|
+
record: JSON.parse(JSON.stringify(input.record)),
|
|
90
|
+
fsSafety: "validated_relative_flowdesk_path_only",
|
|
91
|
+
atomicity: { strategy: "temp_then_rename_intent" },
|
|
92
|
+
...disabledEvidenceAuthority,
|
|
93
|
+
};
|
|
94
|
+
return { ok: true, errors: [], writeIntent };
|
|
95
|
+
}
|
|
96
|
+
function safeJoin(rootDir, relativePath) {
|
|
97
|
+
const root = resolve(rootDir);
|
|
98
|
+
const target = resolve(root, relativePath);
|
|
99
|
+
const rootPrefix = root.endsWith(sep) ? root : `${root}${sep}`;
|
|
100
|
+
if (target !== root && !target.startsWith(rootPrefix))
|
|
101
|
+
throw new Error("evidence target escapes root directory");
|
|
102
|
+
return target;
|
|
103
|
+
}
|
|
104
|
+
function validateSessionEvidenceWriteIntent(intent) {
|
|
105
|
+
const errors = [];
|
|
106
|
+
if (intent.operation !== "write_json")
|
|
107
|
+
errors.push("session evidence intent operation must be write_json");
|
|
108
|
+
if (intent.authority !== "redacted_session_support")
|
|
109
|
+
errors.push("session evidence intent authority is invalid");
|
|
110
|
+
errors.push(...validateOpaqueId(intent.workflowId, "workflow_id").errors);
|
|
111
|
+
errors.push(...validateOpaqueId(intent.evidenceId, "evidence_id").errors);
|
|
112
|
+
if (!FLOWDESK_SESSION_EVIDENCE_CLASSES.includes(intent.evidenceClass))
|
|
113
|
+
errors.push("session evidence class is invalid");
|
|
114
|
+
const expectedSchema = EVIDENCE_SCHEMA_BY_CLASS[intent.evidenceClass];
|
|
115
|
+
if (intent.schemaId !== expectedSchema)
|
|
116
|
+
errors.push("session evidence schemaId does not match evidenceClass");
|
|
117
|
+
const expectedPath = sessionEvidenceRecordPath(intent.workflowId, intent.evidenceClass, intent.evidenceId);
|
|
118
|
+
if (intent.path !== expectedPath)
|
|
119
|
+
errors.push("session evidence path does not match workflow/class/id");
|
|
120
|
+
const expectedTempPrefix = `${expectedPath}.tmp-`;
|
|
121
|
+
if (!intent.tempPath.startsWith(expectedTempPrefix))
|
|
122
|
+
errors.push("session evidence tempPath does not match target path");
|
|
123
|
+
if (!intent.tempPath.includes(expectedSchema.replace(/[^A-Za-z0-9_.-]/g, "-")))
|
|
124
|
+
errors.push("session evidence tempPath does not bind schemaId");
|
|
125
|
+
if (intent.fsSafety !== "validated_relative_flowdesk_path_only")
|
|
126
|
+
errors.push("session evidence fsSafety is invalid");
|
|
127
|
+
if (intent.atomicity?.strategy !== "temp_then_rename_intent")
|
|
128
|
+
errors.push("session evidence atomicity is invalid");
|
|
129
|
+
if (intent.realOpenCodeDispatch !== false ||
|
|
130
|
+
intent.actualLaneLaunch !== false ||
|
|
131
|
+
intent.providerCall !== false ||
|
|
132
|
+
intent.runtimeExecution !== false)
|
|
133
|
+
errors.push("session evidence intent cannot enable runtime authority");
|
|
134
|
+
const shape = validateEvidenceShape(intent.record, intent.evidenceClass);
|
|
135
|
+
errors.push(...shape.errors);
|
|
136
|
+
const alignment = ensureWorkflowAlignment(intent.record, intent.workflowId);
|
|
137
|
+
errors.push(...alignment.errors);
|
|
138
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
139
|
+
}
|
|
140
|
+
export function applyFlowDeskSessionEvidenceWriteIntentsV1(rootDir, intents) {
|
|
141
|
+
if (typeof rootDir !== "string" || rootDir.trim().length === 0)
|
|
142
|
+
return {
|
|
143
|
+
...invalid("rootDir is required"),
|
|
144
|
+
writtenPaths: [],
|
|
145
|
+
...disabledEvidenceAuthority,
|
|
146
|
+
};
|
|
147
|
+
const writtenPaths = [];
|
|
148
|
+
const root = resolve(rootDir);
|
|
149
|
+
try {
|
|
150
|
+
for (const intent of intents) {
|
|
151
|
+
const intentResult = validateSessionEvidenceWriteIntent(intent);
|
|
152
|
+
if (!intentResult.ok)
|
|
153
|
+
return {
|
|
154
|
+
...invalid(...intentResult.errors),
|
|
155
|
+
rootDir: root,
|
|
156
|
+
writtenPaths,
|
|
157
|
+
...disabledEvidenceAuthority,
|
|
158
|
+
};
|
|
159
|
+
const target = safeJoin(root, intent.path);
|
|
160
|
+
const temp = safeJoin(root, intent.tempPath);
|
|
161
|
+
if (dirname(target) !== dirname(temp))
|
|
162
|
+
return {
|
|
163
|
+
...invalid("session evidence tempPath must stay beside target path"),
|
|
164
|
+
rootDir: root,
|
|
165
|
+
writtenPaths,
|
|
166
|
+
...disabledEvidenceAuthority,
|
|
167
|
+
};
|
|
168
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
169
|
+
writeFileSync(temp, JSON.stringify(intent.record), "utf8");
|
|
170
|
+
renameSync(temp, target);
|
|
171
|
+
writtenPaths.push(intent.path);
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
...valid(),
|
|
175
|
+
rootDir: root,
|
|
176
|
+
writtenPaths,
|
|
177
|
+
...disabledEvidenceAuthority,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
return {
|
|
182
|
+
...invalid(error instanceof Error
|
|
183
|
+
? error.message
|
|
184
|
+
: "session evidence write failed"),
|
|
185
|
+
rootDir: root,
|
|
186
|
+
writtenPaths,
|
|
187
|
+
...disabledEvidenceAuthority,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export function reloadFlowDeskSessionEvidenceV1(options) {
|
|
192
|
+
const workflowResult = validateOpaqueId(options.workflowId, "workflow_id");
|
|
193
|
+
if (!workflowResult.ok) {
|
|
194
|
+
return {
|
|
195
|
+
ok: false,
|
|
196
|
+
errors: workflowResult.errors,
|
|
197
|
+
entries: [],
|
|
198
|
+
blocked: [],
|
|
199
|
+
...disabledEvidenceAuthority,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
if (typeof options.rootDir !== "string" || options.rootDir.length === 0) {
|
|
203
|
+
return {
|
|
204
|
+
ok: false,
|
|
205
|
+
errors: ["rootDir is required"],
|
|
206
|
+
entries: [],
|
|
207
|
+
blocked: [],
|
|
208
|
+
...disabledEvidenceAuthority,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const entries = [];
|
|
212
|
+
const blocked = [];
|
|
213
|
+
const errors = [];
|
|
214
|
+
for (const evidenceClass of FLOWDESK_SESSION_EVIDENCE_CLASSES) {
|
|
215
|
+
const relativeDir = sessionEvidenceDirectoryPath(options.workflowId, evidenceClass);
|
|
216
|
+
let absoluteDir;
|
|
217
|
+
try {
|
|
218
|
+
absoluteDir = safeJoin(options.rootDir, relativeDir);
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
errors.push(error instanceof Error
|
|
222
|
+
? error.message
|
|
223
|
+
: `evidence ${evidenceClass} root escape`);
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (!existsSync(absoluteDir))
|
|
227
|
+
continue;
|
|
228
|
+
const stat = lstatSync(absoluteDir);
|
|
229
|
+
if (stat.isSymbolicLink()) {
|
|
230
|
+
errors.push(`evidence ${evidenceClass} root must not be a symlink`);
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (!stat.isDirectory()) {
|
|
234
|
+
errors.push(`evidence ${evidenceClass} target is not a directory`);
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const fileNames = readdirSync(absoluteDir).filter((name) => name.endsWith(".json"));
|
|
238
|
+
for (const fileName of fileNames) {
|
|
239
|
+
const evidenceId = fileName.slice(0, -5);
|
|
240
|
+
const refValidation = validateOpaqueRef(evidenceId, `${evidenceClass}.evidence_id`);
|
|
241
|
+
if (!refValidation.ok) {
|
|
242
|
+
blocked.push({
|
|
243
|
+
evidenceClass,
|
|
244
|
+
evidenceId,
|
|
245
|
+
reason: refValidation.errors.join("; "),
|
|
246
|
+
path: `${relativeDir}/${fileName}`,
|
|
247
|
+
});
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const expectedRelative = sessionEvidenceRecordPath(options.workflowId, evidenceClass, evidenceId);
|
|
251
|
+
let filePath;
|
|
252
|
+
try {
|
|
253
|
+
filePath = safeJoin(options.rootDir, expectedRelative);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
blocked.push({
|
|
257
|
+
evidenceClass,
|
|
258
|
+
evidenceId,
|
|
259
|
+
reason: error instanceof Error ? error.message : "evidence path escape",
|
|
260
|
+
path: expectedRelative,
|
|
261
|
+
});
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
let raw;
|
|
265
|
+
try {
|
|
266
|
+
raw = readFileSync(filePath, "utf8");
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
blocked.push({
|
|
270
|
+
evidenceClass,
|
|
271
|
+
evidenceId,
|
|
272
|
+
reason: error instanceof Error ? error.message : "evidence read failed",
|
|
273
|
+
path: expectedRelative,
|
|
274
|
+
});
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
let parsed;
|
|
278
|
+
try {
|
|
279
|
+
parsed = JSON.parse(raw);
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
blocked.push({
|
|
283
|
+
evidenceClass,
|
|
284
|
+
evidenceId,
|
|
285
|
+
reason: error instanceof Error ? error.message : "evidence parse failed",
|
|
286
|
+
path: expectedRelative,
|
|
287
|
+
});
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (!isRecordObject(parsed)) {
|
|
291
|
+
blocked.push({
|
|
292
|
+
evidenceClass,
|
|
293
|
+
evidenceId,
|
|
294
|
+
reason: "evidence must be an object",
|
|
295
|
+
path: expectedRelative,
|
|
296
|
+
});
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
const shape = validateEvidenceShape(parsed, evidenceClass);
|
|
300
|
+
if (!shape.ok) {
|
|
301
|
+
blocked.push({
|
|
302
|
+
evidenceClass,
|
|
303
|
+
evidenceId,
|
|
304
|
+
reason: shape.errors.join("; "),
|
|
305
|
+
path: expectedRelative,
|
|
306
|
+
});
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
const alignment = ensureWorkflowAlignment(parsed, options.workflowId);
|
|
310
|
+
if (!alignment.ok) {
|
|
311
|
+
blocked.push({
|
|
312
|
+
evidenceClass,
|
|
313
|
+
evidenceId,
|
|
314
|
+
reason: alignment.errors.join("; "),
|
|
315
|
+
path: expectedRelative,
|
|
316
|
+
});
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
entries.push({
|
|
320
|
+
evidenceClass,
|
|
321
|
+
evidenceId,
|
|
322
|
+
record: parsed,
|
|
323
|
+
path: expectedRelative,
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
const reloadResult = {
|
|
328
|
+
ok: errors.length === 0,
|
|
329
|
+
errors,
|
|
330
|
+
entries,
|
|
331
|
+
blocked,
|
|
332
|
+
...disabledEvidenceAuthority,
|
|
333
|
+
};
|
|
334
|
+
return reloadResult;
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=session-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-evidence.js","sourceRoot":"","sources":["../src/session-evidence.ts"],"names":[],"mappings":"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"}
|