@flowdesk/core 0.1.11 → 0.1.13

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.
Files changed (136) hide show
  1. package/dist/agent-profiles.js +0 -1
  2. package/dist/agent-registry.d.ts +43 -0
  3. package/dist/agent-registry.d.ts.map +1 -0
  4. package/dist/agent-registry.js +309 -0
  5. package/dist/agent-registry.js.map +1 -0
  6. package/dist/audit.js +0 -1
  7. package/dist/authority-promotion.js +0 -1
  8. package/dist/bootstrap-foundation.js +0 -1
  9. package/dist/chat-control-authority.js +0 -1
  10. package/dist/chat-hook-authority-probe.js +0 -1
  11. package/dist/chat-routing.d.ts.map +1 -1
  12. package/dist/chat-routing.js +17 -9
  13. package/dist/chat-routing.js.map +1 -1
  14. package/dist/command-manifest.js +0 -1
  15. package/dist/config-policy.js +0 -1
  16. package/dist/connector-gateway.js +0 -1
  17. package/dist/connector-profile.js +0 -1
  18. package/dist/controlled-conformance-doc-write.js +0 -1
  19. package/dist/controlled-redacted-audit-export-write.js +0 -1
  20. package/dist/controlled-workspace-file-write.d.ts +36 -0
  21. package/dist/controlled-workspace-file-write.d.ts.map +1 -0
  22. package/dist/controlled-workspace-file-write.js +130 -0
  23. package/dist/controlled-workspace-file-write.js.map +1 -0
  24. package/dist/core-completion-safety-contracts.js +0 -1
  25. package/dist/dispatch-attempt-manifest.js +0 -1
  26. package/dist/dispatch-idempotency.js +0 -1
  27. package/dist/external-auth-policy.js +0 -1
  28. package/dist/fake-remote-connector-adapter.js +0 -1
  29. package/dist/fake-runtime.js +0 -1
  30. package/dist/fallback-decision.js +0 -1
  31. package/dist/fallback-regate-plan.js +0 -1
  32. package/dist/fds1-schema-probe-result.js +0 -1
  33. package/dist/guard-boundary.js +0 -1
  34. package/dist/guarded-dry-run.js +0 -1
  35. package/dist/hook-harness.js +0 -1
  36. package/dist/index.d.ts +12 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +12 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/lane-heartbeat.js +0 -1
  41. package/dist/lane-lifecycle-record.d.ts +2 -0
  42. package/dist/lane-lifecycle-record.d.ts.map +1 -1
  43. package/dist/lane-lifecycle-record.js +6 -1
  44. package/dist/lane-lifecycle-record.js.map +1 -1
  45. package/dist/lane-observability.js +0 -1
  46. package/dist/lane-stall-projection.d.ts.map +1 -1
  47. package/dist/lane-stall-projection.js +55 -15
  48. package/dist/lane-stall-projection.js.map +1 -1
  49. package/dist/managed-dispatch-evidence-shape.js +0 -1
  50. package/dist/model-availability-cache.js +1 -2
  51. package/dist/model-availability-cache.js.map +1 -1
  52. package/dist/operational-intelligence.js +0 -1
  53. package/dist/pending-abort.d.ts +26 -0
  54. package/dist/pending-abort.d.ts.map +1 -0
  55. package/dist/pending-abort.js +78 -0
  56. package/dist/pending-abort.js.map +1 -0
  57. package/dist/plan.js +0 -1
  58. package/dist/planning-evidence-common.d.ts +18 -0
  59. package/dist/planning-evidence-common.d.ts.map +1 -0
  60. package/dist/planning-evidence-common.js +95 -0
  61. package/dist/planning-evidence-common.js.map +1 -0
  62. package/dist/pre-dispatch-audit-record.js +0 -1
  63. package/dist/production-approval-source.js +0 -1
  64. package/dist/production-enablement.js +0 -1
  65. package/dist/production-verification.js +0 -1
  66. package/dist/provider-failures.js +0 -1
  67. package/dist/provider-usage-collector.d.ts.map +1 -1
  68. package/dist/provider-usage-collector.js +104 -10
  69. package/dist/provider-usage-collector.js.map +1 -1
  70. package/dist/redaction.js +0 -1
  71. package/dist/release1-contracts.d.ts +1 -0
  72. package/dist/release1-contracts.d.ts.map +1 -1
  73. package/dist/release1-contracts.js +0 -1
  74. package/dist/release1-contracts.js.map +1 -1
  75. package/dist/remote-write-connector-gate.js +0 -1
  76. package/dist/retry-plan.d.ts +97 -0
  77. package/dist/retry-plan.d.ts.map +1 -0
  78. package/dist/retry-plan.js +265 -0
  79. package/dist/retry-plan.js.map +1 -0
  80. package/dist/retry.js +0 -1
  81. package/dist/reviewer-lane-conformance.js +0 -1
  82. package/dist/runtime-lane-productization.d.ts +1 -1
  83. package/dist/runtime-lane-productization.d.ts.map +1 -1
  84. package/dist/runtime-lane-productization.js +1 -1
  85. package/dist/runtime-lane-productization.js.map +1 -1
  86. package/dist/sanitized-auth-capture.js +0 -1
  87. package/dist/schema-artifacts.d.ts.map +1 -1
  88. package/dist/schema-artifacts.js +2 -2
  89. package/dist/schema-artifacts.js.map +1 -1
  90. package/dist/schema-registry.d.ts.map +1 -1
  91. package/dist/schema-registry.js +5 -1
  92. package/dist/schema-registry.js.map +1 -1
  93. package/dist/session-evidence.d.ts.map +1 -1
  94. package/dist/session-evidence.js +58 -0
  95. package/dist/session-evidence.js.map +1 -1
  96. package/dist/state-paths.d.ts +1 -1
  97. package/dist/state-paths.d.ts.map +1 -1
  98. package/dist/state-paths.js +32 -0
  99. package/dist/state-paths.js.map +1 -1
  100. package/dist/state-store.js +0 -1
  101. package/dist/status.js +0 -1
  102. package/dist/task-agent-assignment.d.ts +30 -0
  103. package/dist/task-agent-assignment.d.ts.map +1 -0
  104. package/dist/task-agent-assignment.js +77 -0
  105. package/dist/task-agent-assignment.js.map +1 -0
  106. package/dist/task-graph.d.ts +31 -0
  107. package/dist/task-graph.d.ts.map +1 -0
  108. package/dist/task-graph.js +122 -0
  109. package/dist/task-graph.js.map +1 -0
  110. package/dist/task-model-selection.d.ts +36 -0
  111. package/dist/task-model-selection.d.ts.map +1 -0
  112. package/dist/task-model-selection.js +99 -0
  113. package/dist/task-model-selection.js.map +1 -0
  114. package/dist/task-result.d.ts +31 -0
  115. package/dist/task-result.d.ts.map +1 -0
  116. package/dist/task-result.js +115 -0
  117. package/dist/task-result.js.map +1 -0
  118. package/dist/tool-contract-fixtures.js +0 -1
  119. package/dist/top-tier-reviewer-lane-probe.js +0 -1
  120. package/dist/usage-health.js +0 -1
  121. package/dist/validators.d.ts.map +1 -1
  122. package/dist/validators.js +10 -2
  123. package/dist/validators.js.map +1 -1
  124. package/dist/workflow-authoring-result.d.ts +25 -0
  125. package/dist/workflow-authoring-result.d.ts.map +1 -0
  126. package/dist/workflow-authoring-result.js +63 -0
  127. package/dist/workflow-authoring-result.js.map +1 -0
  128. package/dist/workflow-dispatch-plan.d.ts +65 -0
  129. package/dist/workflow-dispatch-plan.d.ts.map +1 -0
  130. package/dist/workflow-dispatch-plan.js +228 -0
  131. package/dist/workflow-dispatch-plan.js.map +1 -0
  132. package/dist/workflow-synthesis.d.ts +18 -0
  133. package/dist/workflow-synthesis.d.ts.map +1 -0
  134. package/dist/workflow-synthesis.js +40 -0
  135. package/dist/workflow-synthesis.js.map +1 -0
  136. package/package.json +1 -1
@@ -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":"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"}
package/dist/audit.js CHANGED
@@ -62,4 +62,3 @@ export function preparePreRunAuditWriteIntent(sessionId, event, options) {
62
62
  return invalid("pre-run audit requires workflow_id and attempt_id");
63
63
  return prepareAuditEventWriteIntent(sessionId, event, options);
64
64
  }
65
- //# sourceMappingURL=audit.js.map
@@ -385,4 +385,3 @@ export function promoteFlowDeskExternalWriteAuthorityV1(input) {
385
385
  external_write_authority_enabled: true,
386
386
  };
387
387
  }
388
- //# sourceMappingURL=authority-promotion.js.map
@@ -770,4 +770,3 @@ export function redactedBootstrapRef(ref) {
770
770
  throw new Error(result.errors.join("; "));
771
771
  return ref;
772
772
  }
773
- //# sourceMappingURL=bootstrap-foundation.js.map
@@ -235,4 +235,3 @@ export function evaluateFlowDeskPermissionAskDecisionV1(input) {
235
235
  hardCancelOrNoReplyAuthority: false,
236
236
  };
237
237
  }
238
- //# sourceMappingURL=chat-control-authority.js.map
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"chat-routing.d.ts","sourceRoot":"","sources":["../src/chat-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EACjB,SAAS,EAEV,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,2BAA2B,CAAC;IACrC,cAAc,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC;IAC/C,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,+BAAgC,SAAQ,gBAAgB;IACvE,QAAQ,EAAE,4BAA4B,CAAC;CACxC;AA4LD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,0BAA0B,GAAG,4BAA4B,CAcjH;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,0BAA0B,GAAG,+BAA+B,CAK/G"}
1
+ {"version":3,"file":"chat-routing.d.ts","sourceRoot":"","sources":["../src/chat-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EACjB,SAAS,EAEV,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,2BAA2B,CAAC;IACrC,cAAc,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAAC;IAC/C,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,+BAAgC,SAAQ,gBAAgB;IACvE,QAAQ,EAAE,4BAA4B,CAAC;CACxC;AAqMD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,0BAA0B,GAAG,4BAA4B,CAcjH;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,0BAA0B,GAAG,+BAA+B,CAK/G"}
@@ -2,14 +2,15 @@ import { invalid, valid, validateChatIntakeRequestV1, validateChatIntakeResponse
2
2
  const fallbackActions = ["/flowdesk-doctor", "/flowdesk-status", "/flowdesk-export-debug"];
3
3
  const unsafeLaterGatePattern = /\b(real[\s_-]*(?:opencode[\s_-]*)?dispatch|realOpenCodeDispatch|actual[\s_-]*lane[\s_-]*launch|actualLaneLaunch|provider[\s_-]*(?:call|request|api)|providerCall|automatic[\s_-]*(?:fallback|reselection)|automaticFallbackOrReselection|fallback[\s_-]*(?:provider|model|authority)|fallbackAuthority|reselect(?:ion)?|hard[\s_-]*(?:cancel|stop|no[\s_-]*reply)|hardCancelOrNoReply|noReply|no[\s_-]*reply|cancel:\s*true|stop:\s*true|opencode[\s_-]*run)\b/i;
4
4
  const planningPattern = /\b(implement|add|build|create|fix|change|refactor|test|write|plan|debug|investigate|review|improve|audit|critique|assess|evaluate|analyze|inspect)\b|(?:계획|구현|만들|개발|수정|버그|개선|리팩토|테스트|작성|조사|분석|리뷰|검토|점검|진단|평가)/i;
5
+ const reviewIntentPattern = /\b(?:review|critique|assess|evaluate|audit|inspect|how\s+(?:does\s+this\s+look|is\s+this\s+code)|what\s+(?:do|would)\s+you\s+think|spot\s+(?:issues|problems)|find\s+(?:issues|problems|bugs))\b|(?:리뷰|검토|점검|비판|평가|봐줘|괜찮(?:아|은지)|문제\s*(?:있어|찾)|이슈\s*찾|어때(?:\?|$|보여))/i;
5
6
  const executionLikePattern = /\b(?:run|execute|start|kick[\s_-]*off|launch)\b.{0,50}\b(?:fake[\s_-]*runtime|guarded[\s_-]*dry[\s_-]*run|dry[\s_-]*run|plan|workflow)\b|\b(?:fake[\s_-]*runtime|guarded[\s_-]*dry[\s_-]*run|dry[\s_-]*run)\b|(?:실행|진행(?:해|하))|(?:(?:fake[\s_-]*runtime|guarded[\s_-]*dry[\s_-]*run|dry[\s_-]*run|페이크|드라이런|계획|플랜|workflow|워크플로(?:우)?).{0,40}(?:돌려(?:줘|봐)?|시작\s*(?:해|하|시켜)|런(?:해|시켜)))|(?:(?:돌려(?:줘|봐)?|시작\s*(?:해|하|시켜)|런(?:해|시켜)).{0,40}(?:fake[\s_-]*runtime|guarded[\s_-]*dry[\s_-]*run|dry[\s_-]*run|페이크|드라이런|계획|플랜|workflow|워크플로(?:우)?))/i;
6
7
  const explicitApprovalPattern = /\b(?:approve(?:d)?|confirm(?:ed)?|yes|proceed|go ahead|ok(?:ay)?|sure|sounds good)\b|(?:승인|확인|동의|좋아|네|예|오케이|진행\s*(?:해|하|하세요)|실행\s*(?:해|하|하세요)|그렇게\s*해|해주세요)/i;
7
8
  const clarificationPattern = /\b(maybe|not sure|unclear|something|stuff|thing|help me with it|continue this|kinda|sort of|whatever)\b|(?:잘\s*모르(?:겠|겠어)|애매|뭐였|뭔가|어떻게\s*해(?:야)?|뭐\s*해야|아무거나|적당히|대충)/i;
8
9
  const proactiveUsagePreflightPattern = /\b(?:large|big|long|multi[\s_-]*step|multi[\s_-]*perspective|multi[\s_-]*model|extensive|whole|entire|full[\s_-]*(?:pass|review|refactor)|many files|agentic loop|autonomous|refactor|migration|audit|review)\b|(?:큰\s*작업|대규모|장시간|오래\s*걸|전체|전부|다관점|다각도|멀티\s*(?:모델|관점)|여러\s*관점|리팩토링|마이그레이션|긴\s*작업|전체\s*완료|끝까지|심층\s*(?:리뷰|검토|분석))/i;
9
10
  const continuousWorkPattern = /\b(?:continue\s+(?:if\s+you\s+have\s+next\s+steps|until\s+blocked|with\s+the\s+(?:plan|design)|the\s+(?:whole|entire)\s+(?:plan|design)|working)|keep\s+(?:going|working)|work\s+through\s+the\s+(?:whole\s+)?(?:plan|design)|proceed\s+(?:with\s+)?(?:the\s+)?(?:whole|entire)?\s*(?:plan|design)|do\s+not\s+stop\s+until\s+blocked|don'?t\s+stop\s+until\s+blocked)\b|(?:계획\s*(?:전체|전부)?\s*(?:진행|계속|이어)|전체\s*(?:계획|설계|설계문서)\s*(?:진행|계속|기반)|설계\s*(?:문서)?\s*(?:기반|대로)\s*(?:계속|진행)|막히기\s*전까지|막히기전까지|막히지\s*않으면\s*(?:계속|진행)|계속\s*(?:진행|작업|이어|해줘)|전부\s*계속|다\s*끝날\s*때까지|다음\s*작업\s*(?:등록|이어)|끊기지\s*않게)/i;
10
11
  const commandRoutes = [
11
- [/\b(?:show|current|check|get|what(?:'s| is)|how(?:'s| is) (?:it|things))\b.{0,40}\b(?:status|progress|state|checkpoint|workflow|lane|attempt|heartbeat)\b|\bflowdesk-status\b|\b(?:is\s+(?:it|this|that)\s+stuck|seems?\s+stuck|stalled|no\s+log|no\s+update|no\s+response|frozen|hung|hanging|silent|heartbeat\s+(?:status|check)|recent\s+heartbeat|lane\s+heartbeat|last\s+heartbeat)\b|(?:상태|진행\s*상황|진행\s*상태|어디까지|어디 까지|어디쯤|현재\s*상태|현재\s*진행|작업\s*상태|작업\s*어디까지|workflow\s*상태|멈췄|멈춘\s*것\s*같|멈춘\s*거\s*같|응답이\s*없|아무\s*로그도\s*없|로그가\s*없|진행이\s*안돼|진행이\s*안\s*돼|꼼짝\s*안|먹통|하트\s*비트|하트비트|심장\s*박동|심박|진행\s*신호|진행\s*표시|레인\s*상태|레인\s*진행|살아\s*있|최근\s*heartbeat|마지막\s*heartbeat)/i, ["/flowdesk-status"]],
12
12
  [/\b(usage|quota|limit|rate[\s_-]*limit|reset(?:s)?|remaining|budget|credits?|tokens? left|how (?:much|many) (?:tokens?|requests?|usage|left|remaining))\b|(?:사용량|잔량|남은\s*(?:사용량|토큰|요청|쿼터|크레딧|예산)|남은(?:거|것)?\s*얼마|얼마\s*남(?:았|아|아서)|쿼터|한도|리셋|사용\s*가능량|쓸\s*수\s*있|토큰\s*남은|크레딧)/i, ["/flowdesk-usage", "/flowdesk-doctor"]],
13
+ [/\b(?:show|current|check|get|what(?:'s| is)|how(?:'s| is) (?:it|things)|how\s+did\s+(?:it|that|the\s+(?:run|review))\s+go|did\s+it\s+(?:work|finish|complete)|last\s+(?:run|review|result|status)|earlier\s+(?:run|review|result)|previous\s+(?:run|review|result)|just\s+now|a\s+(?:moment|second)\s+ago)\b.{0,40}\b(?:status|progress|state|checkpoint|workflow|lane|attempt|heartbeat|review|result|run|finish)\b|\bflowdesk-status\b|\b(?:how\s+did\s+(?:it|that)\s+go|did\s+it\s+(?:work|finish|complete)|is\s+(?:it|this|that)\s+stuck|seems?\s+stuck|stalled|no\s+log|no\s+update|no\s+response|frozen|hung|hanging|silent|heartbeat\s+(?:status|check)|recent\s+heartbeat|lane\s+heartbeat|last\s+heartbeat)\b|(?:상태|진행\s*상황|진행\s*상태|어디까지|어디 까지|어디쯤|현재\s*상태|현재\s*진행|작업\s*상태|작업\s*어디까지|workflow\s*상태|멈췄|멈춘\s*것\s*같|멈춘\s*거\s*같|응답이\s*없|아무\s*로그도\s*없|로그가\s*없|진행이\s*안돼|진행이\s*안\s*돼|꼼짝\s*안|먹통|하트\s*비트|하트비트|심장\s*박동|심박|진행\s*신호|진행\s*표시|레인\s*상태|레인\s*진행|살아\s*있|최근\s*heartbeat|마지막\s*heartbeat|방금\s*(?:거|뭐|결과|어땠|어떻|어떘|한\s*거)|직전\s*(?:거|결과|어땠)|조금\s*전에?\s*(?:거|결과|한\s*거)|이전\s*(?:거|결과)|아까\s*(?:거|결과|뭐|한)|최근에\s*한\s*(?:거|작업)|결과\s*(?:보여|알려|어땠|어땠어|어떻게)|잘\s*됐어|잘\s*됐나|잘\s*끝났|성공\s*했어|성공\s*했나)/i, ["/flowdesk-status"]],
13
14
  [/\b(doctor|diagnos(?:e|tic)|compatibility|health[\s_-]*check|sanity[\s_-]*check)\b|(?:진단|점검|건강\s*상태|설정\s*확인|환경\s*확인|호환성)/i, ["/flowdesk-doctor"]],
14
15
  [/\b(resume|continue from checkpoint|pick up where|continue (?:the )?workflow)\b|(?:이어\s*(?:서|가)|재개|중단(?:된|했던)\s*거|체크포인트|이어가)/i, ["/flowdesk-status", "/flowdesk-resume"]],
15
16
  [/\b(retry|try again|run again|do over)\b|(?:다시\s*(?:해|시도|돌려|실행)|재시도|또\s*해)/i, ["/flowdesk-status", "/flowdesk-retry"]],
@@ -80,15 +81,23 @@ function commandFallbackResponse(input, actions) {
80
81
  route_decision: "use_command_fallback"
81
82
  };
82
83
  }
83
- function managedPlanResponse(input, usagePreflight = false) {
84
+ function managedPlanResponse(input, usagePreflight = false, reviewIntent = false) {
85
+ const baseActions = usagePreflight
86
+ ? ["/flowdesk-usage", "/flowdesk-plan", "/flowdesk-status"]
87
+ : ["/flowdesk-plan", "/flowdesk-status"];
88
+ const userMessage = reviewIntent
89
+ ? usagePreflight
90
+ ? "FlowDesk detected a review intent. Provider usage check is recommended before launching the FlowDesk quick reviewer (flowdesk_quick_reviewer_run) for multi-perspective critique."
91
+ : "FlowDesk detected a review intent. The FlowDesk quick reviewer (flowdesk_quick_reviewer_run) can run a 3-perspective fan-out on this target."
92
+ : usagePreflight
93
+ ? "FlowDesk should check provider usage before steering this larger request into a guarded command-backed planning flow."
94
+ : "FlowDesk can steer this request into a guarded command-backed planning flow.";
84
95
  return {
85
96
  schema_version: "flowdesk.chat_intake.response.v1",
86
97
  ok: true,
87
98
  status: "ready",
88
- safe_next_actions: usagePreflight ? ["/flowdesk-usage", "/flowdesk-plan", "/flowdesk-status"] : ["/flowdesk-plan", "/flowdesk-status"],
89
- user_message: usagePreflight
90
- ? "FlowDesk should check provider usage before steering this larger request into a guarded command-backed planning flow."
91
- : "FlowDesk can steer this request into a guarded command-backed planning flow.",
99
+ safe_next_actions: baseActions,
100
+ user_message: userMessage,
92
101
  classification: "managed_plan",
93
102
  redacted_intake_ref: redactedIntakeRef(input),
94
103
  route_decision: "show_plan"
@@ -188,8 +197,8 @@ export function buildFlowDeskChatIntakeResponseV1(input) {
188
197
  const command = commandRoutes.find(([pattern]) => pattern.test(summary));
189
198
  if (command !== undefined)
190
199
  return commandFallbackResponse(input, command[1]);
191
- if (planningPattern.test(summary))
192
- return clarificationPattern.test(summary) ? clarifyResponse(input) : managedPlanResponse(input, proactiveUsagePreflightPattern.test(summary));
200
+ if (planningPattern.test(summary) || reviewIntentPattern.test(summary))
201
+ return clarificationPattern.test(summary) ? clarifyResponse(input) : managedPlanResponse(input, proactiveUsagePreflightPattern.test(summary), reviewIntentPattern.test(summary));
193
202
  return continueChatResponse(input);
194
203
  }
195
204
  export function evaluateFlowDeskChatIntakeV1(input) {
@@ -199,4 +208,3 @@ export function evaluateFlowDeskChatIntakeV1(input) {
199
208
  return { ...invalid(...responseResult.errors), response };
200
209
  return { ...valid(), response };
201
210
  }
202
- //# sourceMappingURL=chat-routing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-routing.js","sourceRoot":"","sources":["../src/chat-routing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-routing.js","sourceRoot":"","sources":["../src/chat-routing.ts"],"names":[],"mappings":"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"}
@@ -237,4 +237,3 @@ export function validateFlowDeskCommandManifestComplete(manifest = FLOWDESK_RELE
237
237
  ...entryResults
238
238
  ]);
239
239
  }
240
- //# sourceMappingURL=command-manifest.js.map
@@ -338,4 +338,3 @@ export function mergePolicyPacksV1(config, policyPacks, options) {
338
338
  audit_ref: options.auditRef
339
339
  };
340
340
  }
341
- //# sourceMappingURL=config-policy.js.map
@@ -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"}