@flowdesk/core 0.1.12 → 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 (114) 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.js +0 -1
  12. package/dist/command-manifest.js +0 -1
  13. package/dist/config-policy.js +0 -1
  14. package/dist/connector-gateway.js +0 -1
  15. package/dist/connector-profile.js +0 -1
  16. package/dist/controlled-conformance-doc-write.js +0 -1
  17. package/dist/controlled-redacted-audit-export-write.js +0 -1
  18. package/dist/controlled-workspace-file-write.d.ts +36 -0
  19. package/dist/controlled-workspace-file-write.d.ts.map +1 -0
  20. package/dist/controlled-workspace-file-write.js +130 -0
  21. package/dist/controlled-workspace-file-write.js.map +1 -0
  22. package/dist/core-completion-safety-contracts.js +0 -1
  23. package/dist/dispatch-attempt-manifest.js +0 -1
  24. package/dist/dispatch-idempotency.js +0 -1
  25. package/dist/external-auth-policy.js +0 -1
  26. package/dist/fake-remote-connector-adapter.js +0 -1
  27. package/dist/fake-runtime.js +0 -1
  28. package/dist/fallback-decision.js +0 -1
  29. package/dist/fallback-regate-plan.js +0 -1
  30. package/dist/fds1-schema-probe-result.js +0 -1
  31. package/dist/guard-boundary.js +0 -1
  32. package/dist/guarded-dry-run.js +0 -1
  33. package/dist/hook-harness.js +0 -1
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +9 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/lane-heartbeat.js +0 -1
  39. package/dist/lane-lifecycle-record.js +0 -1
  40. package/dist/lane-observability.js +0 -1
  41. package/dist/lane-stall-projection.js +0 -1
  42. package/dist/managed-dispatch-evidence-shape.js +0 -1
  43. package/dist/model-availability-cache.js +0 -1
  44. package/dist/operational-intelligence.js +0 -1
  45. package/dist/pending-abort.js +0 -1
  46. package/dist/plan.js +0 -1
  47. package/dist/planning-evidence-common.d.ts +18 -0
  48. package/dist/planning-evidence-common.d.ts.map +1 -0
  49. package/dist/planning-evidence-common.js +95 -0
  50. package/dist/planning-evidence-common.js.map +1 -0
  51. package/dist/pre-dispatch-audit-record.js +0 -1
  52. package/dist/production-approval-source.js +0 -1
  53. package/dist/production-enablement.js +0 -1
  54. package/dist/production-verification.js +0 -1
  55. package/dist/provider-failures.js +0 -1
  56. package/dist/provider-usage-collector.d.ts.map +1 -1
  57. package/dist/provider-usage-collector.js +104 -10
  58. package/dist/provider-usage-collector.js.map +1 -1
  59. package/dist/redaction.js +0 -1
  60. package/dist/release1-contracts.js +0 -1
  61. package/dist/remote-write-connector-gate.js +0 -1
  62. package/dist/retry-plan.d.ts +20 -2
  63. package/dist/retry-plan.d.ts.map +1 -1
  64. package/dist/retry-plan.js +57 -3
  65. package/dist/retry-plan.js.map +1 -1
  66. package/dist/retry.js +0 -1
  67. package/dist/reviewer-lane-conformance.js +0 -1
  68. package/dist/runtime-lane-productization.js +0 -1
  69. package/dist/sanitized-auth-capture.js +0 -1
  70. package/dist/schema-artifacts.js +0 -1
  71. package/dist/schema-registry.d.ts.map +1 -1
  72. package/dist/schema-registry.js +5 -1
  73. package/dist/schema-registry.js.map +1 -1
  74. package/dist/session-evidence.d.ts.map +1 -1
  75. package/dist/session-evidence.js +32 -1
  76. package/dist/session-evidence.js.map +1 -1
  77. package/dist/state-paths.d.ts +1 -1
  78. package/dist/state-paths.d.ts.map +1 -1
  79. package/dist/state-paths.js +16 -0
  80. package/dist/state-paths.js.map +1 -1
  81. package/dist/state-store.js +0 -1
  82. package/dist/status.js +0 -1
  83. package/dist/task-agent-assignment.d.ts +30 -0
  84. package/dist/task-agent-assignment.d.ts.map +1 -0
  85. package/dist/task-agent-assignment.js +77 -0
  86. package/dist/task-agent-assignment.js.map +1 -0
  87. package/dist/task-graph.d.ts +31 -0
  88. package/dist/task-graph.d.ts.map +1 -0
  89. package/dist/task-graph.js +122 -0
  90. package/dist/task-graph.js.map +1 -0
  91. package/dist/task-model-selection.d.ts +36 -0
  92. package/dist/task-model-selection.d.ts.map +1 -0
  93. package/dist/task-model-selection.js +99 -0
  94. package/dist/task-model-selection.js.map +1 -0
  95. package/dist/task-result.js +0 -1
  96. package/dist/tool-contract-fixtures.js +0 -1
  97. package/dist/top-tier-reviewer-lane-probe.js +0 -1
  98. package/dist/usage-health.js +0 -1
  99. package/dist/validators.d.ts.map +1 -1
  100. package/dist/validators.js +10 -2
  101. package/dist/validators.js.map +1 -1
  102. package/dist/workflow-authoring-result.d.ts +25 -0
  103. package/dist/workflow-authoring-result.d.ts.map +1 -0
  104. package/dist/workflow-authoring-result.js +63 -0
  105. package/dist/workflow-authoring-result.js.map +1 -0
  106. package/dist/workflow-dispatch-plan.d.ts +65 -0
  107. package/dist/workflow-dispatch-plan.d.ts.map +1 -0
  108. package/dist/workflow-dispatch-plan.js +228 -0
  109. package/dist/workflow-dispatch-plan.js.map +1 -0
  110. package/dist/workflow-synthesis.d.ts +18 -0
  111. package/dist/workflow-synthesis.d.ts.map +1 -0
  112. package/dist/workflow-synthesis.js +40 -0
  113. package/dist/workflow-synthesis.js.map +1 -0
  114. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ import { FLOWDESK_PLANNING_AUTHORITY_KEYS_V1, invalid, isPlanningEvidenceRecord, rejectUnknownPlanningProperties, requirePlanningKeys, valid, validatePlanningAuthorityFalse, validatePlanningNoForbiddenPayloads, validatePlanningOpaqueId, validatePlanningOpaqueRefArray, validatePlanningSafeText, validatePlanningTimestamp, } from "./planning-evidence-common.js";
2
+ export const FLOWDESK_WORKFLOW_AUTHORING_RESULT_SCHEMA_VERSION_V1 = "flowdesk.workflow_authoring_result.v1";
3
+ const ALLOWED_KEYS = new Set([
4
+ "schema_version",
5
+ "workflow_id",
6
+ "authoring_result_id",
7
+ "goal_summary",
8
+ "scope_summary",
9
+ "output_summary",
10
+ "risk_summary",
11
+ "status",
12
+ "created_at",
13
+ "evidence_refs",
14
+ "release_gate",
15
+ ...FLOWDESK_PLANNING_AUTHORITY_KEYS_V1,
16
+ "redaction_version",
17
+ ]);
18
+ const REQUIRED_KEYS = [
19
+ "schema_version",
20
+ "workflow_id",
21
+ "authoring_result_id",
22
+ "goal_summary",
23
+ "scope_summary",
24
+ "output_summary",
25
+ "risk_summary",
26
+ "status",
27
+ "created_at",
28
+ "evidence_refs",
29
+ "release_gate",
30
+ ...FLOWDESK_PLANNING_AUTHORITY_KEYS_V1,
31
+ "redaction_version",
32
+ ];
33
+ const STATUSES = new Set([
34
+ "authored",
35
+ "blocked",
36
+ "needs_clarification",
37
+ ]);
38
+ export function validateFlowDeskWorkflowAuthoringResultV1(value) {
39
+ if (!isPlanningEvidenceRecord(value))
40
+ return invalid("workflow authoring result must be an object");
41
+ const errors = [];
42
+ errors.push(...rejectUnknownPlanningProperties(value, ALLOWED_KEYS, "workflow authoring result"));
43
+ errors.push(...requirePlanningKeys(value, REQUIRED_KEYS, "workflow authoring result"));
44
+ if (value.schema_version !== FLOWDESK_WORKFLOW_AUTHORING_RESULT_SCHEMA_VERSION_V1)
45
+ errors.push(`schema_version must be ${FLOWDESK_WORKFLOW_AUTHORING_RESULT_SCHEMA_VERSION_V1}`);
46
+ errors.push(...validatePlanningOpaqueId(value.workflow_id, "workflow_id").errors);
47
+ errors.push(...validatePlanningOpaqueId(value.authoring_result_id, "authoring_result_id").errors);
48
+ errors.push(...validatePlanningSafeText(value.goal_summary, "goal_summary", 500).errors);
49
+ errors.push(...validatePlanningSafeText(value.scope_summary, "scope_summary", 500).errors);
50
+ errors.push(...validatePlanningSafeText(value.output_summary, "output_summary", 500).errors);
51
+ errors.push(...validatePlanningSafeText(value.risk_summary, "risk_summary", 500).errors);
52
+ if (!STATUSES.has(value.status))
53
+ errors.push("status is invalid");
54
+ errors.push(...validatePlanningTimestamp(value.created_at, "created_at").errors);
55
+ errors.push(...validatePlanningOpaqueRefArray(value.evidence_refs, "evidence_refs", 16).errors);
56
+ if (value.release_gate !== "release1_planning_only")
57
+ errors.push("release_gate must be release1_planning_only");
58
+ if (value.redaction_version !== "v1")
59
+ errors.push("redaction_version must be v1");
60
+ errors.push(...validatePlanningAuthorityFalse(value, "workflow_authoring_result"));
61
+ errors.push(...validatePlanningNoForbiddenPayloads(value, "workflow_authoring_result").errors);
62
+ return errors.length === 0 ? valid() : invalid(...errors);
63
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-authoring-result.js","sourceRoot":"","sources":["../src/workflow-authoring-result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type FlowDeskAgentRegistryRoleCategoryV1, type FlowDeskAgentRegistryV1 } from "./agent-registry.js";
2
+ import type { OpaqueId, OpaqueRef } from "./release1-contracts.js";
3
+ import { type ValidationResult } from "./validators.js";
4
+ export declare const FLOWDESK_WORKFLOW_DISPATCH_PLAN_SCHEMA_VERSION_V1: "flowdesk.workflow_dispatch_plan.v1";
5
+ export interface FlowDeskWorkflowDispatchSelectedAgentRoleV1 {
6
+ agent_role: FlowDeskAgentRegistryRoleCategoryV1;
7
+ agent_role_ref?: OpaqueRef;
8
+ registry_entry_ref?: OpaqueRef;
9
+ }
10
+ export interface FlowDeskWorkflowDispatchTaskV1 {
11
+ task_id: OpaqueId;
12
+ title: string;
13
+ summary: string;
14
+ agent_role: FlowDeskAgentRegistryRoleCategoryV1;
15
+ agent_role_ref?: OpaqueRef;
16
+ depends_on_task_ids?: OpaqueId[];
17
+ }
18
+ export interface FlowDeskWorkflowDispatchModelSelectionDiagnosticsV1 {
19
+ diagnostic_refs: OpaqueRef[];
20
+ diagnostic_labels: string[];
21
+ scoring_authority_enabled: false;
22
+ fallback_or_reselection_allowed: false;
23
+ }
24
+ export interface FlowDeskWorkflowDispatchPlanV1 {
25
+ schema_version: typeof FLOWDESK_WORKFLOW_DISPATCH_PLAN_SCHEMA_VERSION_V1;
26
+ workflow_id: OpaqueId;
27
+ plan_revision_id: OpaqueId;
28
+ requested_goal_summary: string;
29
+ selected_agent_roles: FlowDeskWorkflowDispatchSelectedAgentRoleV1[];
30
+ tasks: FlowDeskWorkflowDispatchTaskV1[];
31
+ task_graph_summary: string;
32
+ model_selection_diagnostics: FlowDeskWorkflowDispatchModelSelectionDiagnosticsV1;
33
+ release_gate: "release1_planning_only";
34
+ dispatch_authority_enabled: false;
35
+ provider_call_made: false;
36
+ runtime_execution: false;
37
+ actual_lane_launch: false;
38
+ redaction_version: "v1";
39
+ }
40
+ export interface FlowDeskWorkflowDispatchPlanInputV1 {
41
+ workflowId: OpaqueId;
42
+ planRevisionId: OpaqueId;
43
+ requestedGoalSummary: string;
44
+ selectedAgentRoles: FlowDeskWorkflowDispatchSelectedAgentRoleV1[];
45
+ tasks: FlowDeskWorkflowDispatchTaskV1[];
46
+ taskGraphSummary: string;
47
+ modelSelectionDiagnosticRefs?: OpaqueRef[];
48
+ modelSelectionDiagnosticLabels?: string[];
49
+ registry?: FlowDeskAgentRegistryV1;
50
+ }
51
+ export interface FlowDeskWorkflowDispatchPlanEvaluationV1 extends ValidationResult {
52
+ plan?: FlowDeskWorkflowDispatchPlanV1;
53
+ runtime: {
54
+ realOpenCodeDispatch: false;
55
+ actualLaneLaunch: false;
56
+ providerCall: false;
57
+ runtimeExecution: false;
58
+ automaticFallbackOrReselection: false;
59
+ };
60
+ }
61
+ export declare function validateFlowDeskWorkflowDispatchPlanV1(value: unknown, options?: {
62
+ registry?: FlowDeskAgentRegistryV1;
63
+ }): ValidationResult;
64
+ export declare function evaluateFlowDeskWorkflowDispatchPlanningV1(input: FlowDeskWorkflowDispatchPlanInputV1): FlowDeskWorkflowDispatchPlanEvaluationV1;
65
+ //# sourceMappingURL=workflow-dispatch-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-dispatch-plan.d.ts","sourceRoot":"","sources":["../src/workflow-dispatch-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,mCAAmC,EACxC,KAAK,uBAAuB,EAE5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAEN,KAAK,gBAAgB,EAKrB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,iDAAiD,EAAG,oCAA6C,CAAC;AAE/G,MAAM,WAAW,2CAA2C;IAC3D,UAAU,EAAE,mCAAmC,CAAC;IAChD,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,kBAAkB,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,8BAA8B;IAC9C,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,mCAAmC,CAAC;IAChD,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,mBAAmB,CAAC,EAAE,QAAQ,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mDAAmD;IACnE,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,yBAAyB,EAAE,KAAK,CAAC;IACjC,+BAA+B,EAAE,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,8BAA8B;IAC9C,cAAc,EAAE,OAAO,iDAAiD,CAAC;IACzE,WAAW,EAAE,QAAQ,CAAC;IACtB,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,2CAA2C,EAAE,CAAC;IACpE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,mDAAmD,CAAC;IACjF,YAAY,EAAE,wBAAwB,CAAC;IACvC,0BAA0B,EAAE,KAAK,CAAC;IAClC,kBAAkB,EAAE,KAAK,CAAC;IAC1B,iBAAiB,EAAE,KAAK,CAAC;IACzB,kBAAkB,EAAE,KAAK,CAAC;IAC1B,iBAAiB,EAAE,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mCAAmC;IACnD,UAAU,EAAE,QAAQ,CAAC;IACrB,cAAc,EAAE,QAAQ,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,2CAA2C,EAAE,CAAC;IAClE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,4BAA4B,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3C,8BAA8B,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACnC;AAED,MAAM,WAAW,wCAAyC,SAAQ,gBAAgB;IACjF,IAAI,CAAC,EAAE,8BAA8B,CAAC;IACtC,OAAO,EAAE;QACR,oBAAoB,EAAE,KAAK,CAAC;QAC5B,gBAAgB,EAAE,KAAK,CAAC;QACxB,YAAY,EAAE,KAAK,CAAC;QACpB,gBAAgB,EAAE,KAAK,CAAC;QACxB,8BAA8B,EAAE,KAAK,CAAC;KACtC,CAAC;CACF;AA2JD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,uBAAuB,CAAA;CAAO,GAAG,gBAAgB,CA0B7I;AAED,wBAAgB,0CAA0C,CAAC,KAAK,EAAE,mCAAmC,GAAG,wCAAwC,CAwB/I"}
@@ -0,0 +1,228 @@
1
+ import { FLOWDESK_AGENT_REGISTRY_ROLE_CATEGORIES_V1, FLOWDESK_AGENT_REGISTRY_SCHEMA_VERSION_V1, validateFlowDeskAgentRegistryV1, } from "./agent-registry.js";
2
+ import { invalid, valid, validateNoForbiddenRawPayloads, validateOpaqueId, validateOpaqueRef, } from "./validators.js";
3
+ export const FLOWDESK_WORKFLOW_DISPATCH_PLAN_SCHEMA_VERSION_V1 = "flowdesk.workflow_dispatch_plan.v1";
4
+ const inertRuntime = {
5
+ realOpenCodeDispatch: false,
6
+ actualLaneLaunch: false,
7
+ providerCall: false,
8
+ runtimeExecution: false,
9
+ automaticFallbackOrReselection: false,
10
+ };
11
+ const PLAN_ALLOWED_KEYS = new Set([
12
+ "schema_version",
13
+ "workflow_id",
14
+ "plan_revision_id",
15
+ "requested_goal_summary",
16
+ "selected_agent_roles",
17
+ "tasks",
18
+ "task_graph_summary",
19
+ "model_selection_diagnostics",
20
+ "release_gate",
21
+ "dispatch_authority_enabled",
22
+ "provider_call_made",
23
+ "runtime_execution",
24
+ "actual_lane_launch",
25
+ "redaction_version",
26
+ ]);
27
+ const SELECTED_ROLE_ALLOWED_KEYS = new Set(["agent_role", "agent_role_ref", "registry_entry_ref"]);
28
+ const TASK_ALLOWED_KEYS = new Set(["task_id", "title", "summary", "agent_role", "agent_role_ref", "depends_on_task_ids"]);
29
+ const DIAGNOSTICS_ALLOWED_KEYS = new Set(["diagnostic_refs", "diagnostic_labels", "scoring_authority_enabled", "fallback_or_reselection_allowed"]);
30
+ const AUTHORITY_SMUGGLING_PATTERN = /\b(?:approve(?:d|s)?|approval|authorize(?:d|s)?|authorization|guard(?:ed)?\s+approval|dispatch(?:able|ed|es)?|dispatch\s*-?authority|real\s*-?(?:opencode\s*-?)?dispatch|provider\s*-?(?:call|payload|response)|runtime\s*-?execution|runtime[-_\s]*lane[-_\s]*launch|actual\s*-?lane\s*-?launch|lane\s*-?launch|fallback|reselection|reselect|retry\s+with\s+(?:another|different)|switch\s+(?:provider|model)|no\s*-?reply|hard\s*-?(?:cancel|stop)|opencode\s+run|hidden\s+injection)\b/i;
31
+ function isRecord(value) {
32
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33
+ }
34
+ function rejectUnknownProperties(value, allowed, label) {
35
+ return Object.keys(value)
36
+ .filter((key) => !allowed.has(key))
37
+ .map((key) => `${label} has unknown property: ${key}`);
38
+ }
39
+ function requireKeys(value, keys, label) {
40
+ return keys.filter((key) => !(key in value)).map((key) => `${label} missing required field: ${key}`);
41
+ }
42
+ function safeText(value, label, maxLength) {
43
+ if (typeof value !== "string" || value.trim().length === 0)
44
+ return invalid(`${label} must be a non-empty string`);
45
+ if (value.length > maxLength)
46
+ return invalid(`${label} exceeds ${maxLength} chars`);
47
+ const redaction = validateNoForbiddenRawPayloads(value, label);
48
+ if (!redaction.ok)
49
+ return redaction;
50
+ return AUTHORITY_SMUGGLING_PATTERN.test(value) ? invalid(`${label} contains authority-smuggling language`) : valid();
51
+ }
52
+ function role(value, label) {
53
+ return typeof value === "string" && FLOWDESK_AGENT_REGISTRY_ROLE_CATEGORIES_V1.includes(value)
54
+ ? valid()
55
+ : invalid(`${label} is not a registered FlowDesk agent role category`);
56
+ }
57
+ function agentRoleRef(value, label) {
58
+ if (value === undefined)
59
+ return valid();
60
+ if (typeof value !== "string" || !/^agent-[a-z0-9]+(?:-[a-z0-9]+)*$/.test(value)) {
61
+ return invalid(`${label} must be a stable lowercase agent ref`);
62
+ }
63
+ return validateNoForbiddenRawPayloads(value, label);
64
+ }
65
+ function opaqueRefArray(value, label, maxItems) {
66
+ if (!Array.isArray(value))
67
+ return invalid(`${label} must be an array`);
68
+ if (value.length > maxItems)
69
+ return invalid(`${label} exceeds ${maxItems} items`);
70
+ const errors = value.flatMap((item, index) => validateOpaqueRef(item, `${label}[${index}]`).errors);
71
+ return errors.length === 0 ? valid() : invalid(...errors);
72
+ }
73
+ function safeLabelArray(value, label, maxItems) {
74
+ if (!Array.isArray(value))
75
+ return invalid(`${label} must be an array`);
76
+ if (value.length > maxItems)
77
+ return invalid(`${label} exceeds ${maxItems} items`);
78
+ const errors = value.flatMap((item, index) => safeText(item, `${label}[${index}]`, 120).errors);
79
+ return errors.length === 0 ? valid() : invalid(...errors);
80
+ }
81
+ function validateSelectedAgentRole(value, label) {
82
+ if (!isRecord(value))
83
+ return invalid(`${label} must be an object`);
84
+ const errors = [];
85
+ errors.push(...rejectUnknownProperties(value, SELECTED_ROLE_ALLOWED_KEYS, label));
86
+ errors.push(...requireKeys(value, ["agent_role"], label));
87
+ errors.push(...role(value.agent_role, `${label}.agent_role`).errors);
88
+ errors.push(...agentRoleRef(value.agent_role_ref, `${label}.agent_role_ref`).errors);
89
+ errors.push(...(value.registry_entry_ref === undefined ? [] : validateOpaqueRef(value.registry_entry_ref, `${label}.registry_entry_ref`).errors));
90
+ errors.push(...validateNoForbiddenRawPayloads(value, label).errors);
91
+ return errors.length === 0 ? valid() : invalid(...errors);
92
+ }
93
+ function validateTask(value, label) {
94
+ if (!isRecord(value))
95
+ return invalid(`${label} must be an object`);
96
+ const errors = [];
97
+ errors.push(...rejectUnknownProperties(value, TASK_ALLOWED_KEYS, label));
98
+ errors.push(...requireKeys(value, ["task_id", "title", "summary", "agent_role"], label));
99
+ errors.push(...validateOpaqueId(value.task_id, `${label}.task_id`).errors);
100
+ errors.push(...safeText(value.title, `${label}.title`, 160).errors);
101
+ errors.push(...safeText(value.summary, `${label}.summary`, 500).errors);
102
+ errors.push(...role(value.agent_role, `${label}.agent_role`).errors);
103
+ errors.push(...agentRoleRef(value.agent_role_ref, `${label}.agent_role_ref`).errors);
104
+ if (value.depends_on_task_ids !== undefined) {
105
+ if (!Array.isArray(value.depends_on_task_ids))
106
+ errors.push(`${label}.depends_on_task_ids must be an array`);
107
+ else if (value.depends_on_task_ids.length > 16)
108
+ errors.push(`${label}.depends_on_task_ids exceeds 16 items`);
109
+ else
110
+ errors.push(...value.depends_on_task_ids.flatMap((id, index) => validateOpaqueId(id, `${label}.depends_on_task_ids[${index}]`).errors));
111
+ }
112
+ errors.push(...validateNoForbiddenRawPayloads(value, label).errors);
113
+ return errors.length === 0 ? valid() : invalid(...errors);
114
+ }
115
+ function validateDiagnostics(value) {
116
+ if (!isRecord(value))
117
+ return invalid("model_selection_diagnostics must be an object");
118
+ const errors = [];
119
+ errors.push(...rejectUnknownProperties(value, DIAGNOSTICS_ALLOWED_KEYS, "model_selection_diagnostics"));
120
+ errors.push(...requireKeys(value, ["diagnostic_refs", "diagnostic_labels", "scoring_authority_enabled", "fallback_or_reselection_allowed"], "model_selection_diagnostics"));
121
+ errors.push(...opaqueRefArray(value.diagnostic_refs, "model_selection_diagnostics.diagnostic_refs", 8).errors);
122
+ errors.push(...safeLabelArray(value.diagnostic_labels, "model_selection_diagnostics.diagnostic_labels", 8).errors);
123
+ if (value.scoring_authority_enabled !== false)
124
+ errors.push("model_selection_diagnostics.scoring_authority_enabled must be false");
125
+ if (value.fallback_or_reselection_allowed !== false)
126
+ errors.push("model_selection_diagnostics.fallback_or_reselection_allowed must be false");
127
+ errors.push(...validateNoForbiddenRawPayloads(value, "model_selection_diagnostics").errors);
128
+ return errors.length === 0 ? valid() : invalid(...errors);
129
+ }
130
+ function registryErrors(value, registry) {
131
+ if (registry === undefined)
132
+ return [];
133
+ const errors = validateFlowDeskAgentRegistryV1(registry).errors.map((error) => `agent_registry: ${error}`);
134
+ if (registry.schema_version !== FLOWDESK_AGENT_REGISTRY_SCHEMA_VERSION_V1 || !Array.isArray(registry.entries))
135
+ return errors;
136
+ const byAgent = new Map(registry.entries.map((entry) => [entry.agent_id, entry]));
137
+ const availableRoles = new Set(registry.entries.map((entry) => entry.role_category));
138
+ for (const [index, selected] of value.selected_agent_roles.entries()) {
139
+ if (!availableRoles.has(selected.agent_role))
140
+ errors.push(`selected_agent_roles[${index}].agent_role is not present in the supplied registry`);
141
+ if (selected.agent_role_ref !== undefined) {
142
+ const entry = byAgent.get(selected.agent_role_ref);
143
+ if (entry === undefined)
144
+ errors.push(`selected_agent_roles[${index}].agent_role_ref is not present in the supplied registry`);
145
+ else if (entry.role_category !== selected.agent_role)
146
+ errors.push(`selected_agent_roles[${index}].agent_role_ref does not match agent_role`);
147
+ }
148
+ }
149
+ for (const [index, task] of value.tasks.entries()) {
150
+ if (!availableRoles.has(task.agent_role))
151
+ errors.push(`tasks[${index}].agent_role is not present in the supplied registry`);
152
+ if (task.agent_role_ref !== undefined) {
153
+ const entry = byAgent.get(task.agent_role_ref);
154
+ if (entry === undefined)
155
+ errors.push(`tasks[${index}].agent_role_ref is not present in the supplied registry`);
156
+ else if (entry.role_category !== task.agent_role)
157
+ errors.push(`tasks[${index}].agent_role_ref does not match agent_role`);
158
+ }
159
+ }
160
+ return errors;
161
+ }
162
+ export function validateFlowDeskWorkflowDispatchPlanV1(value, options = {}) {
163
+ if (!isRecord(value))
164
+ return invalid("workflow dispatch plan must be an object");
165
+ const errors = [];
166
+ errors.push(...rejectUnknownProperties(value, PLAN_ALLOWED_KEYS, "workflow dispatch plan"));
167
+ errors.push(...requireKeys(value, ["schema_version", "workflow_id", "plan_revision_id", "requested_goal_summary", "selected_agent_roles", "tasks", "task_graph_summary", "model_selection_diagnostics", "release_gate", "dispatch_authority_enabled", "provider_call_made", "runtime_execution", "actual_lane_launch", "redaction_version"], "workflow dispatch plan"));
168
+ if (value.schema_version !== FLOWDESK_WORKFLOW_DISPATCH_PLAN_SCHEMA_VERSION_V1)
169
+ errors.push(`schema_version must be ${FLOWDESK_WORKFLOW_DISPATCH_PLAN_SCHEMA_VERSION_V1}`);
170
+ errors.push(...validateOpaqueId(value.workflow_id, "workflow_id").errors);
171
+ errors.push(...validateOpaqueId(value.plan_revision_id, "plan_revision_id").errors);
172
+ errors.push(...safeText(value.requested_goal_summary, "requested_goal_summary", 500).errors);
173
+ if (!Array.isArray(value.selected_agent_roles) || value.selected_agent_roles.length === 0)
174
+ errors.push("selected_agent_roles must be a non-empty array");
175
+ else if (value.selected_agent_roles.length > 16)
176
+ errors.push("selected_agent_roles exceeds 16 items");
177
+ else
178
+ errors.push(...value.selected_agent_roles.flatMap((selected, index) => validateSelectedAgentRole(selected, `selected_agent_roles[${index}]`).errors));
179
+ if (!Array.isArray(value.tasks) || value.tasks.length === 0)
180
+ errors.push("tasks must be a non-empty array");
181
+ else if (value.tasks.length > 32)
182
+ errors.push("tasks exceeds 32 items");
183
+ else
184
+ errors.push(...value.tasks.flatMap((task, index) => validateTask(task, `tasks[${index}]`).errors));
185
+ errors.push(...safeText(value.task_graph_summary, "task_graph_summary", 500).errors);
186
+ errors.push(...validateDiagnostics(value.model_selection_diagnostics).errors);
187
+ if (value.release_gate !== "release1_planning_only")
188
+ errors.push("release_gate must be release1_planning_only");
189
+ if (value.dispatch_authority_enabled !== false)
190
+ errors.push("dispatch_authority_enabled must be false");
191
+ if (value.provider_call_made !== false)
192
+ errors.push("provider_call_made must be false");
193
+ if (value.runtime_execution !== false)
194
+ errors.push("runtime_execution must be false");
195
+ if (value.actual_lane_launch !== false)
196
+ errors.push("actual_lane_launch must be false");
197
+ if (value.redaction_version !== "v1")
198
+ errors.push("redaction_version must be v1");
199
+ errors.push(...validateNoForbiddenRawPayloads(value, "workflow_dispatch_plan").errors);
200
+ if (errors.length === 0)
201
+ errors.push(...registryErrors(value, options.registry));
202
+ return errors.length === 0 ? valid() : invalid(...errors);
203
+ }
204
+ export function evaluateFlowDeskWorkflowDispatchPlanningV1(input) {
205
+ const plan = {
206
+ schema_version: FLOWDESK_WORKFLOW_DISPATCH_PLAN_SCHEMA_VERSION_V1,
207
+ workflow_id: input.workflowId,
208
+ plan_revision_id: input.planRevisionId,
209
+ requested_goal_summary: input.requestedGoalSummary,
210
+ selected_agent_roles: input.selectedAgentRoles,
211
+ tasks: input.tasks,
212
+ task_graph_summary: input.taskGraphSummary,
213
+ model_selection_diagnostics: {
214
+ diagnostic_refs: input.modelSelectionDiagnosticRefs ?? [],
215
+ diagnostic_labels: input.modelSelectionDiagnosticLabels ?? [],
216
+ scoring_authority_enabled: false,
217
+ fallback_or_reselection_allowed: false,
218
+ },
219
+ release_gate: "release1_planning_only",
220
+ dispatch_authority_enabled: false,
221
+ provider_call_made: false,
222
+ runtime_execution: false,
223
+ actual_lane_launch: false,
224
+ redaction_version: "v1",
225
+ };
226
+ const result = validateFlowDeskWorkflowDispatchPlanV1(plan, { registry: input.registry });
227
+ return { ok: result.ok, errors: result.errors, plan: result.ok ? plan : undefined, runtime: inertRuntime };
228
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-dispatch-plan.js","sourceRoot":"","sources":["../src/workflow-dispatch-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare const FLOWDESK_WORKFLOW_SYNTHESIS_RESULT_SCHEMA_VERSION_V1: "flowdesk.workflow_synthesis_result.v1";
2
+ export interface FlowDeskWorkflowSynthesisResultV1 {
3
+ schema_version: typeof FLOWDESK_WORKFLOW_SYNTHESIS_RESULT_SCHEMA_VERSION_V1;
4
+ workflow_id: string;
5
+ synthesis_id: string;
6
+ tasks_summarized: number;
7
+ task_refs: string[];
8
+ conflict_detected: boolean;
9
+ synthesis_summary: string;
10
+ safe_next_actions: string[];
11
+ }
12
+ type ValidationResult = {
13
+ ok: boolean;
14
+ errors: string[];
15
+ };
16
+ export declare function validateFlowDeskWorkflowSynthesisResultV1(v: unknown): ValidationResult;
17
+ export {};
18
+ //# sourceMappingURL=workflow-synthesis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-synthesis.d.ts","sourceRoot":"","sources":["../src/workflow-synthesis.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oDAAoD,EAAC,uCAAgD,CAAC;AACnH,MAAM,WAAW,iCAAiC;IACjD,cAAc,EAAC,OAAO,oDAAoD,CAAC;IAC3E,WAAW,EAAC,MAAM,CAAC;IACnB,YAAY,EAAC,MAAM,CAAC;IACpB,gBAAgB,EAAC,MAAM,CAAC;IACxB,SAAS,EAAC,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAC,OAAO,CAAC;IAC1B,iBAAiB,EAAC,MAAM,CAAC;IACzB,iBAAiB,EAAC,MAAM,EAAE,CAAA;CAC1B;AACD,KAAK,gBAAgB,GAAC;IAAC,EAAE,EAAC,OAAO,CAAC;IAAA,MAAM,EAAC,MAAM,EAAE,CAAA;CAAC,CAAC;AAMnD,wBAAgB,yCAAyC,CAAC,CAAC,EAAC,OAAO,GAAE,gBAAgB,CAkBpF"}
@@ -0,0 +1,40 @@
1
+ export const FLOWDESK_WORKFLOW_SYNTHESIS_RESULT_SCHEMA_VERSION_V1 = "flowdesk.workflow_synthesis_result.v1";
2
+ const K = ["schema_version", "workflow_id", "synthesis_id", "tasks_summarized", "task_refs", "conflict_detected", "synthesis_summary", "safe_next_actions"];
3
+ const bad = /system prompt|provider payload|token|secret|opencode\srun|hidden injection|model switch|lane launch/i;
4
+ const id = (v, n, e) => { if (typeof v !== "string" || !v.trim() || v.length > 128)
5
+ e.push(`${n} invalid`); };
6
+ const text = (v, n, m, e) => { if (typeof v !== "string" || !v.trim() || v.length > m || bad.test(v))
7
+ e.push(`${n} invalid`); };
8
+ export function validateFlowDeskWorkflowSynthesisResultV1(v) {
9
+ const e = [];
10
+ if (!v || typeof v !== "object" || Array.isArray(v))
11
+ return { ok: false, errors: ["workflow synthesis result must be an object"] };
12
+ const r = v;
13
+ for (const k of Object.keys(r))
14
+ if (!K.includes(k))
15
+ e.push(`unknown property: ${k}`);
16
+ for (const k of K)
17
+ if (!(k in r))
18
+ e.push(`missing field: ${k}`);
19
+ if (r.schema_version !== FLOWDESK_WORKFLOW_SYNTHESIS_RESULT_SCHEMA_VERSION_V1)
20
+ e.push("schema_version invalid");
21
+ id(r.workflow_id, "workflow_id", e);
22
+ id(r.synthesis_id, "synthesis_id", e);
23
+ if (!Number.isInteger(r.tasks_summarized) || Number(r.tasks_summarized) < 0)
24
+ e.push("tasks_summarized invalid");
25
+ if (!Array.isArray(r.task_refs) || r.task_refs.length > 32)
26
+ e.push("task_refs invalid");
27
+ else
28
+ r.task_refs.forEach((x, i) => id(x, `task_refs[${i}]`, e));
29
+ if (Array.isArray(r.task_refs) && r.tasks_summarized !== r.task_refs.length)
30
+ e.push("tasks_summarized must match task_refs");
31
+ if (typeof r.conflict_detected !== "boolean")
32
+ e.push("conflict_detected invalid");
33
+ text(r.synthesis_summary, "synthesis_summary", 700, e);
34
+ if (!Array.isArray(r.safe_next_actions) || r.safe_next_actions.length > 8)
35
+ e.push("safe_next_actions invalid");
36
+ else
37
+ r.safe_next_actions.forEach((x, i) => text(x, `safe_next_actions[${i}]`, 120, e));
38
+ return { ok: e.length === 0, errors: e };
39
+ }
40
+ //# sourceMappingURL=workflow-synthesis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-synthesis.js","sourceRoot":"","sources":["../src/workflow-synthesis.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowdesk/core",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "Core FlowDesk contracts and Release 1 boundaries.",
5
5
  "type": "module",
6
6
  "license": "MIT",