@flowdesk/core 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/agent-profiles.js +0 -1
- package/dist/agent-registry.d.ts +43 -0
- package/dist/agent-registry.d.ts.map +1 -0
- package/dist/agent-registry.js +309 -0
- package/dist/agent-registry.js.map +1 -0
- package/dist/audit.js +0 -1
- package/dist/authority-promotion.js +0 -1
- package/dist/bootstrap-foundation.js +0 -1
- package/dist/chat-control-authority.js +0 -1
- package/dist/chat-hook-authority-probe.js +0 -1
- package/dist/chat-routing.js +0 -1
- package/dist/command-manifest.js +0 -1
- package/dist/config-policy.js +0 -1
- package/dist/connector-gateway.js +0 -1
- package/dist/connector-profile.js +0 -1
- package/dist/controlled-conformance-doc-write.js +0 -1
- package/dist/controlled-redacted-audit-export-write.js +0 -1
- package/dist/controlled-workspace-file-write.d.ts +36 -0
- package/dist/controlled-workspace-file-write.d.ts.map +1 -0
- package/dist/controlled-workspace-file-write.js +130 -0
- package/dist/controlled-workspace-file-write.js.map +1 -0
- package/dist/core-completion-safety-contracts.js +0 -1
- package/dist/dispatch-attempt-manifest.js +0 -1
- package/dist/dispatch-idempotency.js +0 -1
- package/dist/external-auth-policy.js +0 -1
- package/dist/fake-remote-connector-adapter.js +0 -1
- package/dist/fake-runtime.js +0 -1
- package/dist/fallback-decision.js +0 -1
- package/dist/fallback-regate-plan.js +0 -1
- package/dist/fds1-schema-probe-result.js +0 -1
- package/dist/guard-boundary.js +0 -1
- package/dist/guarded-dry-run.js +0 -1
- package/dist/hook-harness.js +0 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/lane-heartbeat.js +0 -1
- package/dist/lane-lifecycle-record.js +0 -1
- package/dist/lane-observability.js +0 -1
- package/dist/lane-stall-projection.d.ts +2 -1
- package/dist/lane-stall-projection.d.ts.map +1 -1
- package/dist/lane-stall-projection.js +66 -9
- package/dist/lane-stall-projection.js.map +1 -1
- package/dist/managed-dispatch-evidence-shape.js +0 -1
- package/dist/model-availability-cache.js +0 -1
- package/dist/operational-intelligence.js +0 -1
- package/dist/pending-abort.js +0 -1
- package/dist/plan.js +0 -1
- package/dist/planning-evidence-common.d.ts +18 -0
- package/dist/planning-evidence-common.d.ts.map +1 -0
- package/dist/planning-evidence-common.js +95 -0
- package/dist/planning-evidence-common.js.map +1 -0
- package/dist/pre-dispatch-audit-record.js +0 -1
- package/dist/production-approval-source.js +0 -1
- package/dist/production-enablement.js +0 -1
- package/dist/production-verification.js +0 -1
- package/dist/provider-failures.js +0 -1
- package/dist/provider-usage-collector.d.ts +1 -0
- package/dist/provider-usage-collector.d.ts.map +1 -1
- package/dist/provider-usage-collector.js +179 -29
- package/dist/provider-usage-collector.js.map +1 -1
- package/dist/redaction.js +0 -1
- package/dist/release1-contracts.js +0 -1
- package/dist/remote-write-connector-gate.js +0 -1
- package/dist/retry-plan.d.ts +20 -2
- package/dist/retry-plan.d.ts.map +1 -1
- package/dist/retry-plan.js +57 -3
- package/dist/retry-plan.js.map +1 -1
- package/dist/retry.js +0 -1
- package/dist/reviewer-lane-conformance.js +0 -1
- package/dist/runtime-lane-productization.js +0 -1
- package/dist/sanitized-auth-capture.js +0 -1
- package/dist/schema-artifacts.js +0 -1
- package/dist/schema-registry.d.ts.map +1 -1
- package/dist/schema-registry.js +5 -1
- package/dist/schema-registry.js.map +1 -1
- package/dist/session-evidence.d.ts.map +1 -1
- package/dist/session-evidence.js +44 -3
- package/dist/session-evidence.js.map +1 -1
- package/dist/state-paths.d.ts +1 -1
- package/dist/state-paths.d.ts.map +1 -1
- package/dist/state-paths.js +24 -0
- package/dist/state-paths.js.map +1 -1
- package/dist/state-store.js +0 -1
- package/dist/status.js +0 -1
- package/dist/task-agent-assignment.d.ts +30 -0
- package/dist/task-agent-assignment.d.ts.map +1 -0
- package/dist/task-agent-assignment.js +77 -0
- package/dist/task-agent-assignment.js.map +1 -0
- package/dist/task-graph.d.ts +31 -0
- package/dist/task-graph.d.ts.map +1 -0
- package/dist/task-graph.js +122 -0
- package/dist/task-graph.js.map +1 -0
- package/dist/task-model-selection.d.ts +36 -0
- package/dist/task-model-selection.d.ts.map +1 -0
- package/dist/task-model-selection.js +99 -0
- package/dist/task-model-selection.js.map +1 -0
- package/dist/task-result.d.ts +38 -1
- package/dist/task-result.d.ts.map +1 -1
- package/dist/task-result.js +148 -1
- package/dist/task-result.js.map +1 -1
- package/dist/tool-contract-fixtures.js +0 -1
- package/dist/top-tier-reviewer-lane-probe.js +0 -1
- package/dist/usage-health.js +0 -1
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +10 -2
- package/dist/validators.js.map +1 -1
- package/dist/workflow-authoring-result.d.ts +25 -0
- package/dist/workflow-authoring-result.d.ts.map +1 -0
- package/dist/workflow-authoring-result.js +63 -0
- package/dist/workflow-authoring-result.js.map +1 -0
- package/dist/workflow-dispatch-plan.d.ts +65 -0
- package/dist/workflow-dispatch-plan.d.ts.map +1 -0
- package/dist/workflow-dispatch-plan.js +228 -0
- package/dist/workflow-dispatch-plan.js.map +1 -0
- package/dist/workflow-synthesis.d.ts +18 -0
- package/dist/workflow-synthesis.d.ts.map +1 -0
- package/dist/workflow-synthesis.js +40 -0
- package/dist/workflow-synthesis.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/agent-profiles.js
CHANGED
|
@@ -135,4 +135,3 @@ export function validateAgentProfileV1(value, options = {}) {
|
|
|
135
135
|
errors.push(...redaction.errors);
|
|
136
136
|
return errors.length === 0 ? { ...valid(), canonicalAgentId, migration } : { ...invalid(...errors), canonicalAgentId, migration };
|
|
137
137
|
}
|
|
138
|
-
//# sourceMappingURL=agent-profiles.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type ValidationResult } from "./validators.js";
|
|
2
|
+
export declare const FLOWDESK_AGENT_REGISTRY_ENTRY_SCHEMA_VERSION_V1: "flowdesk.agent_registry_entry.v1";
|
|
3
|
+
export declare const FLOWDESK_AGENT_REGISTRY_SCHEMA_VERSION_V1: "flowdesk.agent_registry.v1";
|
|
4
|
+
export declare const FLOWDESK_AGENT_REGISTRY_RELEASE_GATES_V1: readonly ["release1_planning_only", "later_gate_read_only", "later_gate_scoped_write"];
|
|
5
|
+
export type FlowDeskAgentRegistryReleaseGateV1 = (typeof FLOWDESK_AGENT_REGISTRY_RELEASE_GATES_V1)[number];
|
|
6
|
+
export declare const FLOWDESK_AGENT_REGISTRY_ROLE_CATEGORIES_V1: readonly ["documentation", "exploration", "git", "implementation", "review", "architecture", "decision", "verification", "security", "performance", "migration"];
|
|
7
|
+
export type FlowDeskAgentRegistryRoleCategoryV1 = (typeof FLOWDESK_AGENT_REGISTRY_ROLE_CATEGORIES_V1)[number];
|
|
8
|
+
export declare const FLOWDESK_AGENT_REGISTRY_OUTPUT_CONTRACT_REFS_V1: readonly ["contract-task-result-v1", "contract-reviewer-verdict-v1", "contract-verification-result-v1", "contract-policy-review-result-v1", "contract-architecture-decision-result-v1", "contract-migration-plan-result-v1"];
|
|
9
|
+
export type FlowDeskAgentRegistryOutputContractRefV1 = (typeof FLOWDESK_AGENT_REGISTRY_OUTPUT_CONTRACT_REFS_V1)[number];
|
|
10
|
+
export declare const FLOWDESK_AGENT_REGISTRY_EVIDENCE_CLASSES_V1: readonly ["task_result", "task_failed", "reviewer_verdict", "lane_lifecycle", "lane_heartbeat", "runtime_lane_launch_plan", "verification_result", "policy_review_result", "architecture_decision_result", "migration_plan_result"];
|
|
11
|
+
export type FlowDeskAgentRegistryEvidenceClassV1 = (typeof FLOWDESK_AGENT_REGISTRY_EVIDENCE_CLASSES_V1)[number];
|
|
12
|
+
export declare const FLOWDESK_AGENT_REGISTRY_REQUIRED_FORBIDDEN_ACTIONS_V1: readonly ["hidden_injection", "nested_opencode_run", "automatic_fallback_reselection", "authority_claims"];
|
|
13
|
+
export interface FlowDeskAgentRegistryEntryV1 {
|
|
14
|
+
schema_version: typeof FLOWDESK_AGENT_REGISTRY_ENTRY_SCHEMA_VERSION_V1;
|
|
15
|
+
agent_id: string;
|
|
16
|
+
role_category: FlowDeskAgentRegistryRoleCategoryV1;
|
|
17
|
+
release_gate: FlowDeskAgentRegistryReleaseGateV1;
|
|
18
|
+
description_label: string;
|
|
19
|
+
use_when: string[];
|
|
20
|
+
do_not_use_when: string[];
|
|
21
|
+
allowed_actions: string[];
|
|
22
|
+
forbidden_actions: string[];
|
|
23
|
+
permission_profile_ref: string;
|
|
24
|
+
input_contract_ref: string;
|
|
25
|
+
output_contract_ref: FlowDeskAgentRegistryOutputContractRefV1;
|
|
26
|
+
required_evidence_classes: FlowDeskAgentRegistryEvidenceClassV1[];
|
|
27
|
+
optional_evidence_classes: FlowDeskAgentRegistryEvidenceClassV1[];
|
|
28
|
+
model_eligibility_policy_ref: string;
|
|
29
|
+
default_runtime_agent_ref?: string;
|
|
30
|
+
fallback_allowed: false;
|
|
31
|
+
dispatch_authority_enabled: false;
|
|
32
|
+
redaction_version: "v1";
|
|
33
|
+
}
|
|
34
|
+
export interface FlowDeskAgentRegistryV1 {
|
|
35
|
+
schema_version: typeof FLOWDESK_AGENT_REGISTRY_SCHEMA_VERSION_V1;
|
|
36
|
+
registry_id: string;
|
|
37
|
+
entries: FlowDeskAgentRegistryEntryV1[];
|
|
38
|
+
dispatch_authority_enabled: false;
|
|
39
|
+
redaction_version: "v1";
|
|
40
|
+
}
|
|
41
|
+
export declare function validateFlowDeskAgentRegistryEntryV1(value: unknown): ValidationResult;
|
|
42
|
+
export declare function validateFlowDeskAgentRegistryV1(value: unknown): ValidationResult;
|
|
43
|
+
//# sourceMappingURL=agent-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../src/agent-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,gBAAgB,EAIrB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,+CAA+C,EAAG,kCAA2C,CAAC;AAC3G,eAAO,MAAM,yCAAyC,EAAG,4BAAqC,CAAC;AAE/F,eAAO,MAAM,wCAAwC,wFAI3C,CAAC;AAEX,MAAM,MAAM,kCAAkC,GAAG,CAAC,OAAO,wCAAwC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3G,eAAO,MAAM,0CAA0C,kKAY7C,CAAC;AAEX,MAAM,MAAM,mCAAmC,GAAG,CAAC,OAAO,0CAA0C,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9G,eAAO,MAAM,+CAA+C,8NAOlD,CAAC;AAEX,MAAM,MAAM,wCAAwC,GAAG,CAAC,OAAO,+CAA+C,CAAC,CAAC,MAAM,CAAC,CAAC;AAExH,eAAO,MAAM,2CAA2C,qOAW9C,CAAC;AAEX,MAAM,MAAM,oCAAoC,GAAG,CAAC,OAAO,2CAA2C,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhH,eAAO,MAAM,qDAAqD,4GAKxD,CAAC;AAEX,MAAM,WAAW,4BAA4B;IAC5C,cAAc,EAAE,OAAO,+CAA+C,CAAC;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,mCAAmC,CAAC;IACnD,YAAY,EAAE,kCAAkC,CAAC;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,wCAAwC,CAAC;IAC9D,yBAAyB,EAAE,oCAAoC,EAAE,CAAC;IAClE,yBAAyB,EAAE,oCAAoC,EAAE,CAAC;IAClE,4BAA4B,EAAE,MAAM,CAAC;IACrC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gBAAgB,EAAE,KAAK,CAAC;IACxB,0BAA0B,EAAE,KAAK,CAAC;IAClC,iBAAiB,EAAE,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACvC,cAAc,EAAE,OAAO,yCAAyC,CAAC;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACxC,0BAA0B,EAAE,KAAK,CAAC;IAClC,iBAAiB,EAAE,IAAI,CAAC;CACxB;AAyLD,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAmDrF;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CA2BhF"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { invalid, valid, validateNoForbiddenRawPayloads, validateOpaqueRef, } from "./validators.js";
|
|
2
|
+
export const FLOWDESK_AGENT_REGISTRY_ENTRY_SCHEMA_VERSION_V1 = "flowdesk.agent_registry_entry.v1";
|
|
3
|
+
export const FLOWDESK_AGENT_REGISTRY_SCHEMA_VERSION_V1 = "flowdesk.agent_registry.v1";
|
|
4
|
+
export const FLOWDESK_AGENT_REGISTRY_RELEASE_GATES_V1 = [
|
|
5
|
+
"release1_planning_only",
|
|
6
|
+
"later_gate_read_only",
|
|
7
|
+
"later_gate_scoped_write",
|
|
8
|
+
];
|
|
9
|
+
export const FLOWDESK_AGENT_REGISTRY_ROLE_CATEGORIES_V1 = [
|
|
10
|
+
"documentation",
|
|
11
|
+
"exploration",
|
|
12
|
+
"git",
|
|
13
|
+
"implementation",
|
|
14
|
+
"review",
|
|
15
|
+
"architecture",
|
|
16
|
+
"decision",
|
|
17
|
+
"verification",
|
|
18
|
+
"security",
|
|
19
|
+
"performance",
|
|
20
|
+
"migration",
|
|
21
|
+
];
|
|
22
|
+
export const FLOWDESK_AGENT_REGISTRY_OUTPUT_CONTRACT_REFS_V1 = [
|
|
23
|
+
"contract-task-result-v1",
|
|
24
|
+
"contract-reviewer-verdict-v1",
|
|
25
|
+
"contract-verification-result-v1",
|
|
26
|
+
"contract-policy-review-result-v1",
|
|
27
|
+
"contract-architecture-decision-result-v1",
|
|
28
|
+
"contract-migration-plan-result-v1",
|
|
29
|
+
];
|
|
30
|
+
export const FLOWDESK_AGENT_REGISTRY_EVIDENCE_CLASSES_V1 = [
|
|
31
|
+
"task_result",
|
|
32
|
+
"task_failed",
|
|
33
|
+
"reviewer_verdict",
|
|
34
|
+
"lane_lifecycle",
|
|
35
|
+
"lane_heartbeat",
|
|
36
|
+
"runtime_lane_launch_plan",
|
|
37
|
+
"verification_result",
|
|
38
|
+
"policy_review_result",
|
|
39
|
+
"architecture_decision_result",
|
|
40
|
+
"migration_plan_result",
|
|
41
|
+
];
|
|
42
|
+
export const FLOWDESK_AGENT_REGISTRY_REQUIRED_FORBIDDEN_ACTIONS_V1 = [
|
|
43
|
+
"hidden_injection",
|
|
44
|
+
"nested_opencode_run",
|
|
45
|
+
"automatic_fallback_reselection",
|
|
46
|
+
"authority_claims",
|
|
47
|
+
];
|
|
48
|
+
const ENTRY_ALLOWED_KEYS = new Set([
|
|
49
|
+
"schema_version",
|
|
50
|
+
"agent_id",
|
|
51
|
+
"role_category",
|
|
52
|
+
"release_gate",
|
|
53
|
+
"description_label",
|
|
54
|
+
"use_when",
|
|
55
|
+
"do_not_use_when",
|
|
56
|
+
"allowed_actions",
|
|
57
|
+
"forbidden_actions",
|
|
58
|
+
"permission_profile_ref",
|
|
59
|
+
"input_contract_ref",
|
|
60
|
+
"output_contract_ref",
|
|
61
|
+
"required_evidence_classes",
|
|
62
|
+
"optional_evidence_classes",
|
|
63
|
+
"model_eligibility_policy_ref",
|
|
64
|
+
"default_runtime_agent_ref",
|
|
65
|
+
"fallback_allowed",
|
|
66
|
+
"dispatch_authority_enabled",
|
|
67
|
+
"redaction_version",
|
|
68
|
+
]);
|
|
69
|
+
const ENTRY_REQUIRED_KEYS = [
|
|
70
|
+
"schema_version",
|
|
71
|
+
"agent_id",
|
|
72
|
+
"role_category",
|
|
73
|
+
"release_gate",
|
|
74
|
+
"description_label",
|
|
75
|
+
"use_when",
|
|
76
|
+
"do_not_use_when",
|
|
77
|
+
"allowed_actions",
|
|
78
|
+
"forbidden_actions",
|
|
79
|
+
"permission_profile_ref",
|
|
80
|
+
"input_contract_ref",
|
|
81
|
+
"output_contract_ref",
|
|
82
|
+
"required_evidence_classes",
|
|
83
|
+
"optional_evidence_classes",
|
|
84
|
+
"model_eligibility_policy_ref",
|
|
85
|
+
"fallback_allowed",
|
|
86
|
+
"dispatch_authority_enabled",
|
|
87
|
+
"redaction_version",
|
|
88
|
+
];
|
|
89
|
+
const REGISTRY_ALLOWED_KEYS = new Set([
|
|
90
|
+
"schema_version",
|
|
91
|
+
"registry_id",
|
|
92
|
+
"entries",
|
|
93
|
+
"dispatch_authority_enabled",
|
|
94
|
+
"redaction_version",
|
|
95
|
+
]);
|
|
96
|
+
const AUTHORITY_SMUGGLING_PATTERN = /\b(?:approve(?:d|s)?|approval|authorize(?:d|s)?|authorization|guard(?:ed)?|dispatch(?:able|ed|es)?|dispatch\s*-?authority|fallback|reselection|reselect|no\s*-?reply|hard\s*-?(?:cancel|stop)|real\s*-?(?:opencode\s*-?)?dispatch|provider\s*-?(?:call|payload|response)|runtime\s*-?execution|actual\s*-?lane\s*-?launch|opencode\s+run|hidden\s+injection)\b/i;
|
|
97
|
+
const DISALLOWED_RELEASE1_PATCH_EVIDENCE_PATTERN = /\b(?:patch|diff|write|edit|commit|pull_request|pr|controlled_write|real_patch)\b/i;
|
|
98
|
+
function isRecord(value) {
|
|
99
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
100
|
+
}
|
|
101
|
+
function rejectUnknownProperties(value, allowed, label) {
|
|
102
|
+
return Object.keys(value)
|
|
103
|
+
.filter((key) => !allowed.has(key))
|
|
104
|
+
.map((key) => `${label} has unknown property: ${key}`);
|
|
105
|
+
}
|
|
106
|
+
function requireKeys(value, keys, label) {
|
|
107
|
+
return keys.filter((key) => !(key in value)).map((key) => `${label} missing required field: ${key}`);
|
|
108
|
+
}
|
|
109
|
+
function boundedString(value, label, maxLength = 200) {
|
|
110
|
+
if (typeof value !== "string" || value.trim().length === 0)
|
|
111
|
+
return invalid(`${label} must be a non-empty string`);
|
|
112
|
+
if (value.length > maxLength)
|
|
113
|
+
return invalid(`${label} exceeds ${maxLength} chars`);
|
|
114
|
+
return validateNoForbiddenRawPayloads(value, label);
|
|
115
|
+
}
|
|
116
|
+
function stringArray(value, label, options = {}) {
|
|
117
|
+
if (!Array.isArray(value))
|
|
118
|
+
return invalid(`${label} must be an array`);
|
|
119
|
+
const minItems = options.minItems ?? 1;
|
|
120
|
+
const maxItems = options.maxItems ?? 16;
|
|
121
|
+
const errors = [];
|
|
122
|
+
if (value.length < minItems)
|
|
123
|
+
errors.push(`${label} must contain at least ${minItems} item(s)`);
|
|
124
|
+
if (value.length > maxItems)
|
|
125
|
+
errors.push(`${label} exceeds ${maxItems} items`);
|
|
126
|
+
value.forEach((item, index) => {
|
|
127
|
+
const itemLabel = `${label}[${index}]`;
|
|
128
|
+
if (typeof item !== "string" || item.trim().length === 0) {
|
|
129
|
+
errors.push(`${itemLabel} must be a non-empty string`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (item.length > 160)
|
|
133
|
+
errors.push(`${itemLabel} exceeds 160 chars`);
|
|
134
|
+
errors.push(...validateNoForbiddenRawPayloads(item, itemLabel).errors);
|
|
135
|
+
if (options.allowAuthorityTerms !== true && AUTHORITY_SMUGGLING_PATTERN.test(item)) {
|
|
136
|
+
errors.push(`${itemLabel} contains authority-smuggling language`);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
140
|
+
}
|
|
141
|
+
function safeLabel(value, label) {
|
|
142
|
+
const result = boundedString(value, label, 200);
|
|
143
|
+
if (!result.ok)
|
|
144
|
+
return result;
|
|
145
|
+
return AUTHORITY_SMUGGLING_PATTERN.test(value)
|
|
146
|
+
? invalid(`${label} contains authority-smuggling language`)
|
|
147
|
+
: valid();
|
|
148
|
+
}
|
|
149
|
+
function ref(value, label) {
|
|
150
|
+
const result = validateOpaqueRef(value, label);
|
|
151
|
+
if (!result.ok)
|
|
152
|
+
return result;
|
|
153
|
+
return AUTHORITY_SMUGGLING_PATTERN.test(value)
|
|
154
|
+
? invalid(`${label} contains authority-smuggling language`)
|
|
155
|
+
: valid();
|
|
156
|
+
}
|
|
157
|
+
function enumValue(value, allowed, label) {
|
|
158
|
+
return typeof value === "string" && allowed.includes(value) ? valid() : invalid(`${label} is not allowed`);
|
|
159
|
+
}
|
|
160
|
+
function evidenceArray(value, label, options = {}) {
|
|
161
|
+
const result = stringArray(value, label, { minItems: options.minItems, maxItems: options.maxItems });
|
|
162
|
+
if (!result.ok)
|
|
163
|
+
return result;
|
|
164
|
+
const errors = [];
|
|
165
|
+
value.forEach((item, index) => {
|
|
166
|
+
if (!FLOWDESK_AGENT_REGISTRY_EVIDENCE_CLASSES_V1.includes(item)) {
|
|
167
|
+
errors.push(`${label}[${index}] is not an allowed evidence class`);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
171
|
+
}
|
|
172
|
+
function validateRoleOutputEvidenceCompatibility(value) {
|
|
173
|
+
const role = value.role_category;
|
|
174
|
+
const output = value.output_contract_ref;
|
|
175
|
+
const requiredEvidence = Array.isArray(value.required_evidence_classes) ? value.required_evidence_classes.filter((item) => typeof item === "string") : [];
|
|
176
|
+
const errors = [];
|
|
177
|
+
const hasAny = (...classes) => classes.some((evidenceClass) => requiredEvidence.includes(evidenceClass));
|
|
178
|
+
const terminalEvidenceEquivalent = hasAny("lane_lifecycle", "task_result", "task_failed", "reviewer_verdict", "verification_result", "policy_review_result", "architecture_decision_result", "migration_plan_result");
|
|
179
|
+
if (!terminalEvidenceEquivalent) {
|
|
180
|
+
errors.push("required_evidence_classes must include lane_lifecycle or terminal evidence such as task_result/reviewer_verdict");
|
|
181
|
+
}
|
|
182
|
+
if (role === "review") {
|
|
183
|
+
if (output !== "contract-reviewer-verdict-v1" && output !== "contract-task-result-v1") {
|
|
184
|
+
errors.push("review role must use contract-reviewer-verdict-v1 or advisory contract-task-result-v1");
|
|
185
|
+
}
|
|
186
|
+
if (output === "contract-task-result-v1" && requiredEvidence.includes("reviewer_verdict")) {
|
|
187
|
+
errors.push("review role with advisory contract-task-result-v1 must not require reviewer_verdict evidence");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (role === "verification") {
|
|
191
|
+
if (output !== "contract-verification-result-v1" && output !== "contract-task-result-v1") {
|
|
192
|
+
errors.push("verification role must use contract-verification-result-v1 or contract-task-result-v1");
|
|
193
|
+
}
|
|
194
|
+
if (!requiredEvidence.includes("lane_lifecycle"))
|
|
195
|
+
errors.push("verification role must require lane_lifecycle evidence");
|
|
196
|
+
if (!hasAny("task_result", "verification_result"))
|
|
197
|
+
errors.push("verification role must require task_result or verification_result evidence");
|
|
198
|
+
}
|
|
199
|
+
if (role === "implementation") {
|
|
200
|
+
if (value.release_gate !== "release1_planning_only" && value.release_gate !== "later_gate_scoped_write") {
|
|
201
|
+
errors.push("implementation role must be release1_planning_only or later_gate_scoped_write");
|
|
202
|
+
}
|
|
203
|
+
for (const evidenceClass of requiredEvidence) {
|
|
204
|
+
if (DISALLOWED_RELEASE1_PATCH_EVIDENCE_PATTERN.test(evidenceClass)) {
|
|
205
|
+
errors.push("implementation role must not require real patch/write evidence in Release 1 registry entries");
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (role === "security") {
|
|
210
|
+
if (output !== "contract-policy-review-result-v1" && output !== "contract-task-result-v1") {
|
|
211
|
+
errors.push("security role must use contract-policy-review-result-v1 or advisory contract-task-result-v1");
|
|
212
|
+
}
|
|
213
|
+
for (const label of ["output_contract_ref", "permission_profile_ref"]) {
|
|
214
|
+
const text = value[label];
|
|
215
|
+
if (typeof text === "string" && /(?:guard|dispatch).*(?:approval|approve|authority)|(?:approval|approve|authority).*(?:guard|dispatch)/i.test(text)) {
|
|
216
|
+
errors.push(`${label} must not claim Guard approval or dispatch approval authority`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
221
|
+
}
|
|
222
|
+
export function validateFlowDeskAgentRegistryEntryV1(value) {
|
|
223
|
+
if (!isRecord(value))
|
|
224
|
+
return invalid("agent registry entry must be an object");
|
|
225
|
+
const errors = [];
|
|
226
|
+
errors.push(...rejectUnknownProperties(value, ENTRY_ALLOWED_KEYS, "agent registry entry"));
|
|
227
|
+
errors.push(...requireKeys(value, ENTRY_REQUIRED_KEYS, "agent registry entry"));
|
|
228
|
+
if (value.schema_version !== FLOWDESK_AGENT_REGISTRY_ENTRY_SCHEMA_VERSION_V1) {
|
|
229
|
+
errors.push(`schema_version must be ${FLOWDESK_AGENT_REGISTRY_ENTRY_SCHEMA_VERSION_V1}`);
|
|
230
|
+
}
|
|
231
|
+
if (typeof value.agent_id !== "string" || !/^agent-[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value.agent_id)) {
|
|
232
|
+
errors.push("agent_id must be a stable lowercase FlowDesk-owned agent id such as agent-security-policy");
|
|
233
|
+
}
|
|
234
|
+
if (typeof value.agent_id === "string" && /\b(?:omo|omc)\b/i.test(value.agent_id)) {
|
|
235
|
+
errors.push("agent_id must not use forbidden legacy agent naming");
|
|
236
|
+
}
|
|
237
|
+
if (!FLOWDESK_AGENT_REGISTRY_RELEASE_GATES_V1.includes(value.release_gate)) {
|
|
238
|
+
errors.push("release_gate is invalid");
|
|
239
|
+
}
|
|
240
|
+
errors.push(...safeLabel(value.role_category, "role_category").errors);
|
|
241
|
+
errors.push(...enumValue(value.role_category, FLOWDESK_AGENT_REGISTRY_ROLE_CATEGORIES_V1, "role_category").errors);
|
|
242
|
+
errors.push(...safeLabel(value.description_label, "description_label").errors);
|
|
243
|
+
errors.push(...stringArray(value.use_when, "use_when").errors);
|
|
244
|
+
errors.push(...stringArray(value.do_not_use_when, "do_not_use_when").errors);
|
|
245
|
+
errors.push(...stringArray(value.allowed_actions, "allowed_actions").errors);
|
|
246
|
+
errors.push(...stringArray(value.forbidden_actions, "forbidden_actions", { allowAuthorityTerms: true }).errors);
|
|
247
|
+
const forbiddenActions = Array.isArray(value.forbidden_actions) ? value.forbidden_actions : [];
|
|
248
|
+
for (const required of FLOWDESK_AGENT_REGISTRY_REQUIRED_FORBIDDEN_ACTIONS_V1) {
|
|
249
|
+
if (!forbiddenActions.includes(required))
|
|
250
|
+
errors.push(`forbidden_actions must include ${required}`);
|
|
251
|
+
}
|
|
252
|
+
errors.push(...ref(value.permission_profile_ref, "permission_profile_ref").errors);
|
|
253
|
+
errors.push(...ref(value.input_contract_ref, "input_contract_ref").errors);
|
|
254
|
+
errors.push(...ref(value.output_contract_ref, "output_contract_ref").errors);
|
|
255
|
+
errors.push(...enumValue(value.output_contract_ref, FLOWDESK_AGENT_REGISTRY_OUTPUT_CONTRACT_REFS_V1, "output_contract_ref").errors);
|
|
256
|
+
errors.push(...evidenceArray(value.required_evidence_classes, "required_evidence_classes", { maxItems: 12 }).errors);
|
|
257
|
+
errors.push(...evidenceArray(value.optional_evidence_classes, "optional_evidence_classes", { minItems: 0, maxItems: 12 }).errors);
|
|
258
|
+
errors.push(...ref(value.model_eligibility_policy_ref, "model_eligibility_policy_ref").errors);
|
|
259
|
+
if (value.default_runtime_agent_ref !== undefined) {
|
|
260
|
+
if (typeof value.default_runtime_agent_ref !== "string" || !/^agent-[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value.default_runtime_agent_ref)) {
|
|
261
|
+
errors.push("default_runtime_agent_ref must be a stable lowercase agent ref when present");
|
|
262
|
+
}
|
|
263
|
+
errors.push(...validateNoForbiddenRawPayloads(value.default_runtime_agent_ref, "default_runtime_agent_ref").errors);
|
|
264
|
+
}
|
|
265
|
+
if (value.fallback_allowed !== false)
|
|
266
|
+
errors.push("fallback_allowed must be false");
|
|
267
|
+
if (value.dispatch_authority_enabled !== false)
|
|
268
|
+
errors.push("dispatch_authority_enabled must be false");
|
|
269
|
+
if (value.redaction_version !== "v1")
|
|
270
|
+
errors.push("redaction_version must be v1");
|
|
271
|
+
errors.push(...validateRoleOutputEvidenceCompatibility(value).errors);
|
|
272
|
+
errors.push(...validateNoForbiddenRawPayloads(value, "agent_registry_entry").errors);
|
|
273
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
274
|
+
}
|
|
275
|
+
export function validateFlowDeskAgentRegistryV1(value) {
|
|
276
|
+
if (!isRecord(value))
|
|
277
|
+
return invalid("agent registry must be an object");
|
|
278
|
+
const errors = [];
|
|
279
|
+
errors.push(...rejectUnknownProperties(value, REGISTRY_ALLOWED_KEYS, "agent registry"));
|
|
280
|
+
errors.push(...requireKeys(value, ["schema_version", "registry_id", "entries", "dispatch_authority_enabled", "redaction_version"], "agent registry"));
|
|
281
|
+
if (value.schema_version !== FLOWDESK_AGENT_REGISTRY_SCHEMA_VERSION_V1) {
|
|
282
|
+
errors.push(`schema_version must be ${FLOWDESK_AGENT_REGISTRY_SCHEMA_VERSION_V1}`);
|
|
283
|
+
}
|
|
284
|
+
errors.push(...ref(value.registry_id, "registry_id").errors);
|
|
285
|
+
if (!Array.isArray(value.entries)) {
|
|
286
|
+
errors.push("entries must be an array");
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
if (value.entries.length === 0)
|
|
290
|
+
errors.push("entries must contain at least one agent");
|
|
291
|
+
if (value.entries.length > 64)
|
|
292
|
+
errors.push("entries exceeds 64 items");
|
|
293
|
+
const seen = new Set();
|
|
294
|
+
value.entries.forEach((entry, index) => {
|
|
295
|
+
errors.push(...validateFlowDeskAgentRegistryEntryV1(entry).errors.map((error) => `entries[${index}]: ${error}`));
|
|
296
|
+
if (isRecord(entry) && typeof entry.agent_id === "string") {
|
|
297
|
+
if (seen.has(entry.agent_id))
|
|
298
|
+
errors.push(`entries[${index}]: duplicate agent_id ${entry.agent_id}`);
|
|
299
|
+
seen.add(entry.agent_id);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
if (value.dispatch_authority_enabled !== false)
|
|
304
|
+
errors.push("dispatch_authority_enabled must be false");
|
|
305
|
+
if (value.redaction_version !== "v1")
|
|
306
|
+
errors.push("redaction_version must be v1");
|
|
307
|
+
errors.push(...validateNoForbiddenRawPayloads(value, "agent_registry").errors);
|
|
308
|
+
return errors.length === 0 ? valid() : invalid(...errors);
|
|
309
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../src/agent-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,OAAO,EAEP,KAAK,EACL,8BAA8B,EAC9B,iBAAiB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,+CAA+C,GAAG,kCAA2C,CAAC;AAC3G,MAAM,CAAC,MAAM,yCAAyC,GAAG,4BAAqC,CAAC;AAE/F,MAAM,CAAC,MAAM,wCAAwC,GAAG;IACvD,wBAAwB;IACxB,sBAAsB;IACtB,yBAAyB;CAChB,CAAC;AAIX,MAAM,CAAC,MAAM,0CAA0C,GAAG;IACzD,eAAe;IACf,aAAa;IACb,KAAK;IACL,gBAAgB;IAChB,QAAQ;IACR,cAAc;IACd,UAAU;IACV,cAAc;IACd,UAAU;IACV,aAAa;IACb,WAAW;CACF,CAAC;AAIX,MAAM,CAAC,MAAM,+CAA+C,GAAG;IAC9D,yBAAyB;IACzB,8BAA8B;IAC9B,iCAAiC;IACjC,kCAAkC;IAClC,0CAA0C;IAC1C,mCAAmC;CAC1B,CAAC;AAIX,MAAM,CAAC,MAAM,2CAA2C,GAAG;IAC1D,aAAa;IACb,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,0BAA0B;IAC1B,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,uBAAuB;CACd,CAAC;AAIX,MAAM,CAAC,MAAM,qDAAqD,GAAG;IACpE,kBAAkB;IAClB,qBAAqB;IACrB,gCAAgC;IAChC,kBAAkB;CACT,CAAC;AAgCX,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAClC,gBAAgB;IAChB,UAAU;IACV,eAAe;IACf,cAAc;IACd,mBAAmB;IACnB,UAAU;IACV,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,oBAAoB;IACpB,qBAAqB;IACrB,2BAA2B;IAC3B,2BAA2B;IAC3B,8BAA8B;IAC9B,2BAA2B;IAC3B,kBAAkB;IAClB,4BAA4B;IAC5B,mBAAmB;CACnB,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG;IAC3B,gBAAgB;IAChB,UAAU;IACV,eAAe;IACf,cAAc;IACd,mBAAmB;IACnB,UAAU;IACV,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,oBAAoB;IACpB,qBAAqB;IACrB,2BAA2B;IAC3B,2BAA2B;IAC3B,8BAA8B;IAC9B,kBAAkB;IAClB,4BAA4B;IAC5B,mBAAmB;CACV,CAAC;AAEX,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACrC,gBAAgB;IAChB,aAAa;IACb,SAAS;IACT,4BAA4B;IAC5B,mBAAmB;CACnB,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,iWAAiW,CAAC;AACtY,MAAM,0CAA0C,GAAG,mFAAmF,CAAC;AAEvI,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA8B,EAAE,OAA4B,EAAE,KAAa;IAC3G,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SACvB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,0BAA0B,GAAG,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAC,KAA8B,EAAE,IAAuB,EAAE,KAAa;IAC1F,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,4BAA4B,GAAG,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa,EAAE,SAAS,GAAG,GAAG;IACpE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAClH,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,KAAK,YAAY,SAAS,QAAQ,CAAC,CAAC;IACpF,OAAO,8BAA8B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa,EAAE,UAAmF,EAAE;IACxI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,0BAA0B,QAAQ,UAAU,CAAC,CAAC;IAC/F,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,YAAY,QAAQ,QAAQ,CAAC,CAAC;IAC/E,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC;QACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,6BAA6B,CAAC,CAAC;YACvD,OAAO;QACR,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,oBAAoB,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,mBAAmB,KAAK,IAAI,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,wCAAwC,CAAC,CAAC;QACnE,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,KAAa;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAe,CAAC;QACvD,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,wCAAwC,CAAC;QAC3D,CAAC,CAAC,KAAK,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,GAAG,CAAC,KAAc,EAAE,KAAa;IACzC,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAe,CAAC;QACvD,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,wCAAwC,CAAC;QAC3D,CAAC,CAAC,KAAK,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,OAA0B,EAAE,KAAa;IAC3E,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,iBAAiB,CAAC,CAAC;AAC5G,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa,EAAE,UAAoD,EAAE;IAC3G,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrG,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC3B,KAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3C,IAAI,CAAC,2CAA2C,CAAC,QAAQ,CAAC,IAA4C,CAAC,EAAE,CAAC;YACzG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,oCAAoC,CAAC,CAAC;QACpE,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,uCAAuC,CAAC,KAA8B;IAC9E,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1K,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,CAAC,GAAG,OAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACnH,MAAM,0BAA0B,GAAG,MAAM,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,uBAAuB,CAAC,CAAC;IAEtN,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,iHAAiH,CAAC,CAAC;IAChI,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,8BAA8B,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;YACvF,MAAM,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,MAAM,KAAK,yBAAyB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC3F,MAAM,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;QAC7G,CAAC;IACF,CAAC;IAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC7B,IAAI,MAAM,KAAK,iCAAiC,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;YAC1F,MAAM,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACxH,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC9I,CAAC;IAED,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,YAAY,KAAK,wBAAwB,IAAI,KAAK,CAAC,YAAY,KAAK,yBAAyB,EAAE,CAAC;YACzG,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAC9F,CAAC;QACD,KAAK,MAAM,aAAa,IAAI,gBAAgB,EAAE,CAAC;YAC9C,IAAI,0CAA0C,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBACpE,MAAM,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;YAC7G,CAAC;QACF,CAAC;IACF,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,kCAAkC,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;YAC3F,MAAM,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC;QAC5G,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,wGAAwG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrJ,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,+DAA+D,CAAC,CAAC;YACtF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,KAAc;IAClE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAEhF,IAAI,KAAK,CAAC,cAAc,KAAK,+CAA+C,EAAE,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,0BAA0B,+CAA+C,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAC1G,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,wCAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAkD,CAAC,EAAE,CAAC;QAClH,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,0CAA0C,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;IACnH,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAEhH,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/F,KAAK,MAAM,QAAQ,IAAI,qDAAqD,EAAE,CAAC;QAC9E,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;IACnF,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,mBAAmB,EAAE,+CAA+C,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;IACpI,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrH,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAClI,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/F,IAAI,KAAK,CAAC,yBAAyB,KAAK,SAAS,EAAE,CAAC;QACnD,IAAI,OAAO,KAAK,CAAC,yBAAyB,KAAK,QAAQ,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC;YACtI,MAAM,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,KAAK,CAAC,yBAAyB,EAAE,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;IACrH,CAAC;IACD,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACpF,IAAI,KAAK,CAAC,0BAA0B,KAAK,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACxG,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAClF,MAAM,CAAC,IAAI,CAAC,GAAG,uCAAuC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;IAErF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAAc;IAC7D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,4BAA4B,EAAE,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACtJ,IAAI,KAAK,CAAC,cAAc,KAAK,yCAAyC,EAAE,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,0BAA0B,yCAAyC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACP,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,CAAC,IAAI,CAAC,GAAG,oCAAoC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,KAAK,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC;YACjH,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC3D,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,yBAAyB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,0BAA0B,KAAK,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACxG,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAClF,MAAM,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/audit.js
CHANGED
|
@@ -150,4 +150,3 @@ export function validateFlowDeskChatHookAuthorityProbeV1(value) {
|
|
|
150
150
|
errors.push(...validateNoForbiddenRawPayloads(record, "chat_hook_authority_probe").errors);
|
|
151
151
|
return errors.length === 0 ? valid() : invalid(...errors);
|
|
152
152
|
}
|
|
153
|
-
//# sourceMappingURL=chat-hook-authority-probe.js.map
|
package/dist/chat-routing.js
CHANGED
package/dist/command-manifest.js
CHANGED
package/dist/config-policy.js
CHANGED
|
@@ -144,4 +144,3 @@ function validateFlowDeskConnectorGatewayReadinessShape(value) {
|
|
|
144
144
|
errors.push(...validateNoForbiddenRawPayloads(record, "connector_gateway_readiness").errors);
|
|
145
145
|
return errors.length === 0 ? valid() : invalid(...errors);
|
|
146
146
|
}
|
|
147
|
-
//# sourceMappingURL=connector-gateway.js.map
|
|
@@ -122,4 +122,3 @@ export function validateFlowDeskConnectorRecipeRefV1(value) {
|
|
|
122
122
|
errors.push(...validateNoForbiddenRawPayloads(record, "connector_recipe_ref").errors);
|
|
123
123
|
return errors.length === 0 ? valid() : invalid(...errors);
|
|
124
124
|
}
|
|
125
|
-
//# sourceMappingURL=connector-profile.js.map
|
|
@@ -139,4 +139,3 @@ export function validateFlowDeskControlledConformanceDocWriteRecordV1(value) {
|
|
|
139
139
|
errors.push(...validateNoForbiddenRawPayloads(record, "controlled_conformance_doc_write_record").errors);
|
|
140
140
|
return errors.length === 0 ? valid() : invalid(...errors);
|
|
141
141
|
}
|
|
142
|
-
//# sourceMappingURL=controlled-conformance-doc-write.js.map
|
|
@@ -142,4 +142,3 @@ export function validateFlowDeskControlledRedactedAuditExportWriteRecordV1(value
|
|
|
142
142
|
errors.push(...validateNoForbiddenRawPayloads(record, "controlled_redacted_audit_export_write_record").errors);
|
|
143
143
|
return errors.length === 0 ? valid() : invalid(...errors);
|
|
144
144
|
}
|
|
145
|
-
//# sourceMappingURL=controlled-redacted-audit-export-write.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ValidationResult } from "./validators.js";
|
|
2
|
+
export interface FlowDeskControlledWorkspaceFileWriteRecordV1 {
|
|
3
|
+
schema_version: "flowdesk.controlled_workspace_file_write.v1";
|
|
4
|
+
ledger_entry_id: string;
|
|
5
|
+
workflow_id: string;
|
|
6
|
+
user_approval_ref: string;
|
|
7
|
+
target_file_path: string;
|
|
8
|
+
expected_content_sha256_ref?: string;
|
|
9
|
+
previous_content_sha256_ref?: string;
|
|
10
|
+
replacement_content_sha256_ref: string;
|
|
11
|
+
reason_summary: string;
|
|
12
|
+
materialized_at: string;
|
|
13
|
+
dev_beta_explicit_opt_in: true;
|
|
14
|
+
developer_mode_acknowledged: true;
|
|
15
|
+
allow_controlled_write: true;
|
|
16
|
+
local_only: true;
|
|
17
|
+
writeAttempted: true;
|
|
18
|
+
remoteWriteAttempted: false;
|
|
19
|
+
githubWriteAttempted: false;
|
|
20
|
+
connectorWriteAttempted: false;
|
|
21
|
+
storageWriteAttempted: false;
|
|
22
|
+
databaseWriteAttempted: false;
|
|
23
|
+
urlWriteAttempted: false;
|
|
24
|
+
rawPathWriteAttempted: false;
|
|
25
|
+
dispatch_authority_enabled: false;
|
|
26
|
+
realOpenCodeDispatch: false;
|
|
27
|
+
providerCall: false;
|
|
28
|
+
actualLaneLaunch: false;
|
|
29
|
+
runtimeExecution: false;
|
|
30
|
+
fallbackAuthority: false;
|
|
31
|
+
toolAuthority: false;
|
|
32
|
+
hardCancelOrNoReplyAuthority: false;
|
|
33
|
+
}
|
|
34
|
+
export declare function validateControlledWorkspaceRelativeFilePath(value: unknown, label?: string): ValidationResult;
|
|
35
|
+
export declare function validateFlowDeskControlledWorkspaceFileWriteRecordV1(value: unknown): ValidationResult;
|
|
36
|
+
//# sourceMappingURL=controlled-workspace-file-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlled-workspace-file-write.d.ts","sourceRoot":"","sources":["../src/controlled-workspace-file-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,gBAAgB,EAIrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,4CAA4C;IAC5D,cAAc,EAAE,6CAA6C,CAAC;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,8BAA8B,EAAE,MAAM,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,IAAI,CAAC;IAC/B,2BAA2B,EAAE,IAAI,CAAC;IAClC,sBAAsB,EAAE,IAAI,CAAC;IAC7B,UAAU,EAAE,IAAI,CAAC;IACjB,cAAc,EAAE,IAAI,CAAC;IACrB,oBAAoB,EAAE,KAAK,CAAC;IAC5B,oBAAoB,EAAE,KAAK,CAAC;IAC5B,uBAAuB,EAAE,KAAK,CAAC;IAC/B,qBAAqB,EAAE,KAAK,CAAC;IAC7B,sBAAsB,EAAE,KAAK,CAAC;IAC9B,iBAAiB,EAAE,KAAK,CAAC;IACzB,qBAAqB,EAAE,KAAK,CAAC;IAC7B,0BAA0B,EAAE,KAAK,CAAC;IAClC,oBAAoB,EAAE,KAAK,CAAC;IAC5B,YAAY,EAAE,KAAK,CAAC;IACpB,gBAAgB,EAAE,KAAK,CAAC;IACxB,gBAAgB,EAAE,KAAK,CAAC;IACxB,iBAAiB,EAAE,KAAK,CAAC;IACzB,aAAa,EAAE,KAAK,CAAC;IACrB,4BAA4B,EAAE,KAAK,CAAC;CACpC;AA8BD,wBAAgB,2CAA2C,CAC1D,KAAK,EAAE,OAAO,EACd,KAAK,SAAqB,GACxB,gBAAgB,CAuBlB;AAWD,wBAAgB,oDAAoD,CACnE,KAAK,EAAE,OAAO,GACZ,gBAAgB,CAoFlB"}
|