create-safest-tools 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +71 -0
  3. package/bin/create-safest-tools.mjs +12 -0
  4. package/package.json +34 -0
  5. package/src/cli.mjs +128 -0
  6. package/src/config.mjs +151 -0
  7. package/src/scaffold.mjs +30 -0
  8. package/template/LICENSE +201 -0
  9. package/template/README.md +35 -0
  10. package/template/console/README.md +28 -0
  11. package/template/console/analytics/AnalyticsWorkspace.tsx +55 -0
  12. package/template/console/analytics/controller.ts +133 -0
  13. package/template/console/analytics/events.ts +33 -0
  14. package/template/console/analytics/store.ts +33 -0
  15. package/template/console/analytics/types.ts +38 -0
  16. package/template/console/appeals/AppealWorkspace.tsx +73 -0
  17. package/template/console/appeals/controller.ts +125 -0
  18. package/template/console/appeals/events.ts +33 -0
  19. package/template/console/appeals/store.ts +35 -0
  20. package/template/console/appeals/types.ts +37 -0
  21. package/template/console/assistant/AssistantWorkspace.tsx +133 -0
  22. package/template/console/assistant/types.ts +34 -0
  23. package/template/console/auth/AccountJourney.tsx +69 -0
  24. package/template/console/auth/InvitationAcceptance.tsx +145 -0
  25. package/template/console/auth/OAuthButtons.tsx +78 -0
  26. package/template/console/auth/OperatorLogin.tsx +110 -0
  27. package/template/console/auth/PasswordRecovery.tsx +132 -0
  28. package/template/console/auth/account-route.ts +15 -0
  29. package/template/console/auth/browser-navigation.ts +7 -0
  30. package/template/console/auth/events.ts +15 -0
  31. package/template/console/command/CommandCentre.tsx +119 -0
  32. package/template/console/command/controller.ts +267 -0
  33. package/template/console/command/events.ts +19 -0
  34. package/template/console/command/store.ts +36 -0
  35. package/template/console/command/types.ts +61 -0
  36. package/template/console/components/AnalystIdentity.tsx +25 -0
  37. package/template/console/components/PageHeader.tsx +27 -0
  38. package/template/console/configuration/ConfigurationDialog.tsx +200 -0
  39. package/template/console/configuration/ConfigurationWorkspace.tsx +66 -0
  40. package/template/console/configuration/FormBuilder.tsx +143 -0
  41. package/template/console/configuration/api.ts +40 -0
  42. package/template/console/configuration/events.ts +14 -0
  43. package/template/console/configuration/types.ts +79 -0
  44. package/template/console/lib/format.ts +49 -0
  45. package/template/console/lib/http.ts +96 -0
  46. package/template/console/main.tsx +225 -0
  47. package/template/console/operations/OperationsWorkspace.tsx +126 -0
  48. package/template/console/operations/controller.ts +237 -0
  49. package/template/console/operations/events.ts +37 -0
  50. package/template/console/operations/store.ts +32 -0
  51. package/template/console/operations/types.ts +107 -0
  52. package/template/console/people/PeopleWorkspace.tsx +81 -0
  53. package/template/console/people/types.ts +25 -0
  54. package/template/console/profile/ProfileWorkspace.tsx +136 -0
  55. package/template/console/profile/events.ts +9 -0
  56. package/template/console/profile/types.ts +6 -0
  57. package/template/console/quality/QualityWorkspace.tsx +87 -0
  58. package/template/console/quality/controller.ts +154 -0
  59. package/template/console/quality/events.ts +34 -0
  60. package/template/console/quality/store.ts +36 -0
  61. package/template/console/quality/types.ts +70 -0
  62. package/template/console/queues/QueueEditor.tsx +173 -0
  63. package/template/console/queues/QueueWorkspace.tsx +109 -0
  64. package/template/console/queues/controller.ts +194 -0
  65. package/template/console/queues/events.ts +34 -0
  66. package/template/console/queues/store.ts +37 -0
  67. package/template/console/queues/types.ts +102 -0
  68. package/template/console/registry/RegistryDialog.tsx +198 -0
  69. package/template/console/registry/RegistryWorkspace.tsx +108 -0
  70. package/template/console/registry/events.ts +14 -0
  71. package/template/console/registry/types.ts +52 -0
  72. package/template/console/reports/ReportDrawer.tsx +159 -0
  73. package/template/console/reports/ReportWorkspace.tsx +90 -0
  74. package/template/console/reports/controller.ts +517 -0
  75. package/template/console/reports/events.ts +42 -0
  76. package/template/console/reports/store.ts +39 -0
  77. package/template/console/reports/types.ts +230 -0
  78. package/template/console/settings/BrandEditor.tsx +126 -0
  79. package/template/console/settings/ChannelDialog.tsx +241 -0
  80. package/template/console/settings/SettingsWorkspace.tsx +155 -0
  81. package/template/console/settings/events.ts +19 -0
  82. package/template/console/settings/handoff.ts +22 -0
  83. package/template/console/settings/types.ts +93 -0
  84. package/template/console/shell/WorkspaceShell.tsx +160 -0
  85. package/template/console/shell/controller.ts +182 -0
  86. package/template/console/shell/events.ts +25 -0
  87. package/template/console/shell/navigation.ts +61 -0
  88. package/template/console/shell/store.ts +56 -0
  89. package/template/console/shell/types.ts +86 -0
  90. package/template/console/workflows/CreateWorkflowDialog.tsx +87 -0
  91. package/template/console/workflows/WorkflowCanvas.tsx +42 -0
  92. package/template/console/workflows/WorkflowDialogs.tsx +6 -0
  93. package/template/console/workflows/WorkflowStudio.tsx +331 -0
  94. package/template/console/workflows/WorkflowWorkspace.tsx +82 -0
  95. package/template/console/workflows/events.ts +17 -0
  96. package/template/console/workflows/graph.ts +156 -0
  97. package/template/console/workflows/templates.ts +70 -0
  98. package/template/console/workflows/types.ts +201 -0
  99. package/template/gitignore.template +18 -0
  100. package/template/migrations/0001_reports_foundation.sql +444 -0
  101. package/template/migrations/0002_human_report_loop.sql +65 -0
  102. package/template/migrations/0003_delivery_reliability.sql +18 -0
  103. package/template/migrations/0004_public_intake.sql +14 -0
  104. package/template/migrations/0005_operations_visibility.sql +24 -0
  105. package/template/migrations/0006_ai_governance.sql +198 -0
  106. package/template/migrations/0007_ai_release_gates.sql +6 -0
  107. package/template/migrations/0008_retention_analytics_exports.sql +52 -0
  108. package/template/migrations/0009_retention_derived_copies.sql +14 -0
  109. package/template/migrations/0010_ai_quality_controls.sql +26 -0
  110. package/template/migrations/0011_analyst_presence.sql +28 -0
  111. package/template/migrations/0012_queue_policies.sql +87 -0
  112. package/template/migrations/0013_routing_agents.sql +63 -0
  113. package/template/migrations/0014_webhook_enrichments.sql +122 -0
  114. package/template/migrations/0015_queue_owned_ai.sql +55 -0
  115. package/template/migrations/0016_operator_accounts.sql +67 -0
  116. package/template/migrations/0017_operator_profiles_and_recovery.sql +33 -0
  117. package/template/migrations/0018_platform_configuration.sql +382 -0
  118. package/template/migrations/0019_workflow_authoring_runtime.sql +372 -0
  119. package/template/migrations/0020_tasks_findings_assistant_budgets.sql +427 -0
  120. package/template/migrations/0021_abuse_evidence_operations.sql +324 -0
  121. package/template/migrations/0022_workflow_dispatch_operations.sql +42 -0
  122. package/template/migrations/0023_component_connection_execution.sql +75 -0
  123. package/template/migrations/0024_access_runtime_integrity.sql +72 -0
  124. package/template/migrations/0025_installation_timezone.sql +11 -0
  125. package/template/migrations/0026_ai_and_egress_execution_controls.sql +49 -0
  126. package/template/migrations/0027_prompt_and_ai_registry.sql +37 -0
  127. package/template/migrations/0028_step_attempt_ai_provenance.sql +13 -0
  128. package/template/migrations/0029_evidence_fetch_transport.sql +5 -0
  129. package/template/migrations/0030_evidence_dlq_incidents.sql +45 -0
  130. package/template/migrations/0031_shadow_quality_integrity.sql +7 -0
  131. package/template/migrations/0032_action_delivery_outbox.sql +55 -0
  132. package/template/migrations/0033_configuration_and_assistant_drafts.sql +43 -0
  133. package/template/migrations/0034_installation_integrations.sql +31 -0
  134. package/template/migrations/0035_workspace_governance.sql +21 -0
  135. package/template/migrations/0036_published_routing_baseline.sql +15 -0
  136. package/template/migrations/0037_builtin_phishing_specialist.sql +71 -0
  137. package/template/migrations/0038_remove_deprecated_enrichment_runtime.sql +228 -0
  138. package/template/migrations/0039_secure_reporting_channels.sql +45 -0
  139. package/template/migrations/0040_notification_only_reporting.sql +24 -0
  140. package/template/migrations/0041_better_auth_credentials.sql +17 -0
  141. package/template/package.json +47 -0
  142. package/template/public/_headers +27 -0
  143. package/template/public/app-icon-192.png +0 -0
  144. package/template/public/app-icon-512.png +0 -0
  145. package/template/public/brand-icon.svg +7 -0
  146. package/template/public/brand-tokens.css +80 -0
  147. package/template/public/console/auth-shell.js +19340 -0
  148. package/template/public/customer-brand.js +58 -0
  149. package/template/public/embed/embed.css +139 -0
  150. package/template/public/embed/embed.js +408 -0
  151. package/template/public/embed/index.html +91 -0
  152. package/template/public/favicon.svg +7 -0
  153. package/template/public/fonts/Manrope-Variable.ttf +0 -0
  154. package/template/public/fonts/Newsreader-Italic-Variable.ttf +0 -0
  155. package/template/public/fonts/Newsreader-Variable.ttf +0 -0
  156. package/template/public/index.html +123 -0
  157. package/template/public/logo-primary.svg +7 -0
  158. package/template/public/logo-reversed.svg +7 -0
  159. package/template/public/manifest.webmanifest +21 -0
  160. package/template/public/public-report.js +184 -0
  161. package/template/public/report/index.html +39 -0
  162. package/template/public/report/public-report.css +20 -0
  163. package/template/public/social-card.png +0 -0
  164. package/template/public/styles.css +1521 -0
  165. package/template/public/widget.css +80 -0
  166. package/template/public/widget.js +220 -0
  167. package/template/reports.config.example.json +38 -0
  168. package/template/reports.schema.json +89 -0
  169. package/template/scripts/reports-auth-onboarding.mjs +180 -0
  170. package/template/scripts/reports-backup.mjs +276 -0
  171. package/template/scripts/reports-cloudflare-preflight.mjs +152 -0
  172. package/template/scripts/reports-deploy.mjs +173 -0
  173. package/template/scripts/reports-plan.mjs +226 -0
  174. package/template/scripts/reports-restore.mjs +180 -0
  175. package/template/scripts/reports-secrets.mjs +73 -0
  176. package/template/scripts/reports-uninstall-plan.mjs +32 -0
  177. package/template/src/agent-executor.ts +330 -0
  178. package/template/src/ai-observability.ts +163 -0
  179. package/template/src/ai-registry-validation.ts +244 -0
  180. package/template/src/ai-registry.ts +292 -0
  181. package/template/src/api-cursor.ts +84 -0
  182. package/template/src/assistant.ts +554 -0
  183. package/template/src/audit.ts +39 -0
  184. package/template/src/backup-service.ts +269 -0
  185. package/template/src/budget-control.ts +127 -0
  186. package/template/src/component-executor.ts +845 -0
  187. package/template/src/configuration-registry.ts +550 -0
  188. package/template/src/connection-egress.ts +430 -0
  189. package/template/src/connection-oauth.ts +368 -0
  190. package/template/src/evidence-service.ts +335 -0
  191. package/template/src/human-tasks.ts +316 -0
  192. package/template/src/index.ts +4114 -0
  193. package/template/src/installation-admin.ts +301 -0
  194. package/template/src/intake-abuse.ts +156 -0
  195. package/template/src/platform-registry-validation.ts +367 -0
  196. package/template/src/platform-registry.ts +753 -0
  197. package/template/src/report-admin.ts +342 -0
  198. package/template/src/report-ai-quality.ts +390 -0
  199. package/template/src/report-ai-validation.ts +80 -0
  200. package/template/src/report-ai.ts +857 -0
  201. package/template/src/report-auth.ts +292 -0
  202. package/template/src/report-better-auth.ts +583 -0
  203. package/template/src/report-context-schema.ts +132 -0
  204. package/template/src/report-context.ts +126 -0
  205. package/template/src/report-crypto.ts +142 -0
  206. package/template/src/report-delivery.ts +579 -0
  207. package/template/src/report-form-validation.ts +51 -0
  208. package/template/src/report-governance.ts +510 -0
  209. package/template/src/report-http.ts +90 -0
  210. package/template/src/report-operations.ts +685 -0
  211. package/template/src/report-operator-accounts.ts +810 -0
  212. package/template/src/report-presence.ts +398 -0
  213. package/template/src/report-queue-validation.ts +309 -0
  214. package/template/src/report-queues.ts +478 -0
  215. package/template/src/report-repository.ts +972 -0
  216. package/template/src/report-router-agent.ts +328 -0
  217. package/template/src/report-router-validation.ts +81 -0
  218. package/template/src/report-routing.ts +178 -0
  219. package/template/src/report-turnstile.ts +142 -0
  220. package/template/src/report-types.ts +224 -0
  221. package/template/src/report-validation.ts +279 -0
  222. package/template/src/report-workflow-validation.ts +119 -0
  223. package/template/src/report-workflow.ts +886 -0
  224. package/template/src/shadow-quality.ts +278 -0
  225. package/template/src/workflow-actions.ts +782 -0
  226. package/template/src/workflow-compiler.ts +230 -0
  227. package/template/src/workflow-dynamic-runtime.ts +613 -0
  228. package/template/src/workflow-effects.ts +316 -0
  229. package/template/src/workflow-expressions.ts +191 -0
  230. package/template/src/workflow-platform-types.ts +121 -0
  231. package/template/src/workflow-platform-validation.ts +540 -0
  232. package/template/src/workflow-repository.ts +916 -0
  233. package/template/src/workflow-runs.ts +686 -0
  234. package/template/src/workflow-simulator.ts +211 -0
  235. package/template/src/workspace-branding.ts +128 -0
  236. package/template/src/workspace-governance.ts +279 -0
  237. package/template/tsconfig.console.json +23 -0
  238. package/template/tsconfig.json +22 -0
  239. package/template/vite.console.config.ts +20 -0
  240. package/template/worker-configuration.d.ts +65 -0
@@ -0,0 +1,70 @@
1
+ import type { JsonObject, WorkflowGraph, WorkflowNodeKind, WorkflowPurpose } from "./types";
2
+
3
+ function node(id: string, kind: WorkflowNodeKind, name: string, x: number, y: number, config: JsonObject = {}, inputMapping: JsonObject = {}) {
4
+ return { id, kind, name, input_mapping: inputMapping, config, metadata: { x, y } };
5
+ }
6
+
7
+ function edge(id: string, from: string, fromPort: string, to: string, toPort = "input") {
8
+ return { id, from: { node_id: from, port: fromPort }, to: { node_id: to, port: toPort } };
9
+ }
10
+
11
+ export type WorkflowTemplate = "human" | "phishing" | "blank";
12
+
13
+ export const workflowTemplateOptions: Array<{ value: WorkflowTemplate; name: string; detail: string }> = [
14
+ { value: "human", name: "Human review", detail: "A clear review and decision path. Best for a first workflow." },
15
+ { value: "phishing", name: "Phishing triage", detail: "Parallel evidence checks followed by required human review." },
16
+ { value: "blank", name: "Blank", detail: "Only a start and end step. Build the path yourself." },
17
+ ];
18
+
19
+ export function workflowTemplate(template: WorkflowTemplate, purpose: WorkflowPurpose): WorkflowGraph {
20
+ const base = {
21
+ schema_version: "1" as const,
22
+ purpose,
23
+ entry_node_id: "start",
24
+ input_schema: { type: "object" },
25
+ terminal_codes: ["resolved"],
26
+ default_policies: {},
27
+ };
28
+ if (template === "blank") return {
29
+ ...base,
30
+ nodes: [node("start", "start", "Report accepted", 40, 220), node("end", "end", "Resolved", 520, 220, { terminal_code: "resolved" })],
31
+ edges: [edge("edge-start-end", "start", "success", "end")],
32
+ };
33
+ if (template === "phishing") return {
34
+ ...base,
35
+ nodes: [
36
+ node("start", "start", "Report accepted", 30, 260),
37
+ node("url-check", "enrichment", "Phishing URL specialist", 270, 40, { component_version_id: "select-a-published-component-version" }, { url: "report.answers.url" }),
38
+ node("account-check", "enrichment", "Account history", 270, 260, { component_version_id: "select-a-published-component-version" }, { account: "report.target.reference" }),
39
+ node("related-check", "enrichment", "Related reports", 270, 480, { component_version_id: "select-a-published-component-version" }, { target: "report.target.reference" }),
40
+ node("join", "join", "Evidence ready", 520, 260, { required_ports: ["url", "account"], optional_ports: ["related"] }),
41
+ node("review", "human_task", "Human review", 760, 90, { queue_id: "select-a-queue", response_schema: { type: "object" } }),
42
+ node("decision", "decision", "Record decision", 760, 260, { policy_version_id: "select-a-policy-version" }, { decision_code: "reviewed", policy_code: "manual-review", rationale: "Recorded after review.", evidence_references: [], finding_ids: [] }),
43
+ node("end", "end", "Resolved", 1000, 260, { terminal_code: "resolved" }),
44
+ ],
45
+ edges: [
46
+ edge("e1", "start", "success", "url-check"), edge("e2", "start", "success", "account-check"), edge("e3", "start", "success", "related-check"),
47
+ edge("e4", "url-check", "success", "join", "url"), edge("e5", "account-check", "success", "join", "account"), edge("e6", "related-check", "success", "join", "related"),
48
+ edge("e7", "join", "success", "review"), edge("e8", "review", "completed", "decision"), edge("e9", "review", "timeout", "decision"), edge("e10", "decision", "recorded", "end"), edge("e11", "decision", "error", "end"),
49
+ ],
50
+ };
51
+ return {
52
+ ...base,
53
+ nodes: [
54
+ node("start", "start", "Report accepted", 40, 220),
55
+ node("review", "human_task", "Human review", 280, 220, { queue_id: "general-review", response_schema: { type: "object" } }),
56
+ node("decision", "decision", "Record decision", 520, 220, { policy_version_id: "policy-v1" }, { decision_code: "reviewed", policy_code: "manual-review", rationale: "Recorded after the required human review step.", evidence_references: [], finding_ids: [] }),
57
+ node("end", "end", "Resolved", 760, 220, { terminal_code: "resolved" }),
58
+ ],
59
+ edges: [edge("e1", "start", "success", "review"), edge("e2", "review", "completed", "decision"), edge("e3", "review", "timeout", "decision"), edge("e4", "decision", "recorded", "end"), edge("e5", "decision", "error", "end")],
60
+ };
61
+ }
62
+
63
+ export const happyPathFixture = {
64
+ name: "Happy path",
65
+ input: {},
66
+ component_results: {},
67
+ human_responses: { review: { outcome: "reviewed" } },
68
+ expected: { status: "passed", terminal_code: "resolved" },
69
+ failure_injection: {},
70
+ };
@@ -0,0 +1,201 @@
1
+ export type JsonPrimitive = string | number | boolean | null;
2
+ export type JsonValue = JsonPrimitive | JsonValue[] | JsonObject;
3
+ export interface JsonObject { [key: string]: JsonValue }
4
+
5
+ export type WorkflowPurpose = "report" | "appeal" | "quality" | "operations";
6
+ export type WorkflowAuthorityMode = "off" | "shadow" | "assist" | "bounded_auto";
7
+ export type WorkflowNodeKind =
8
+ | "start"
9
+ | "enrichment"
10
+ | "parallel_group"
11
+ | "join"
12
+ | "condition"
13
+ | "ai_proposal"
14
+ | "human_task"
15
+ | "send_message"
16
+ | "wait_for_event"
17
+ | "delay"
18
+ | "delay_until"
19
+ | "decision"
20
+ | "action"
21
+ | "handoff"
22
+ | "start_linked_workflow"
23
+ | "end";
24
+
25
+ export interface WorkflowNode {
26
+ id: string;
27
+ kind: WorkflowNodeKind;
28
+ name: string;
29
+ description?: string;
30
+ input_mapping: JsonObject;
31
+ timeout_policy?: JsonObject;
32
+ retry_policy?: JsonObject;
33
+ error_port?: string;
34
+ config: JsonObject;
35
+ metadata?: { x?: number; y?: number; group_id?: string };
36
+ }
37
+
38
+ export interface WorkflowEdge {
39
+ id: string;
40
+ from: { node_id: string; port: string };
41
+ to: { node_id: string; port: string };
42
+ label?: string;
43
+ }
44
+
45
+ export interface WorkflowGraph {
46
+ schema_version: "1";
47
+ purpose: WorkflowPurpose;
48
+ entry_node_id: string;
49
+ nodes: WorkflowNode[];
50
+ edges: WorkflowEdge[];
51
+ input_schema: JsonObject;
52
+ terminal_codes: string[];
53
+ default_policies: JsonObject;
54
+ }
55
+
56
+ export interface WorkflowValidationIssue {
57
+ code: string;
58
+ message: string;
59
+ path?: string;
60
+ nodeId?: string;
61
+ edgeId?: string;
62
+ }
63
+
64
+ export interface WorkflowValidation {
65
+ valid: boolean;
66
+ errors: WorkflowValidationIssue[];
67
+ warnings: WorkflowValidationIssue[];
68
+ estimatedMaximumSteps?: number;
69
+ }
70
+
71
+ export interface WorkflowDraftSummary {
72
+ id: string;
73
+ revision: number;
74
+ validationStatus: string;
75
+ validation: WorkflowValidation;
76
+ }
77
+
78
+ export interface WorkflowDraft extends WorkflowDraftSummary {
79
+ graphDigest: string;
80
+ graph: WorkflowGraph;
81
+ updatedAt: string;
82
+ }
83
+
84
+ export interface WorkflowVersionSummary {
85
+ id: string;
86
+ version: number;
87
+ authorityMode: WorkflowAuthorityMode;
88
+ publishedAt: string;
89
+ graphDigest?: string;
90
+ bundleDigest?: string;
91
+ retiredAt?: string | null;
92
+ }
93
+
94
+ export interface WorkflowFixture {
95
+ id: string;
96
+ name: string;
97
+ input: JsonObject;
98
+ expected: JsonObject;
99
+ failureInjection: JsonObject;
100
+ updatedAt: string;
101
+ }
102
+
103
+ export interface WorkflowSummary {
104
+ id: string;
105
+ key: string;
106
+ name: string;
107
+ description: string;
108
+ purpose: WorkflowPurpose;
109
+ status: string;
110
+ activeVersionId: string | null;
111
+ createdBy: string;
112
+ createdAt: string;
113
+ updatedAt: string;
114
+ draft: WorkflowDraftSummary | null;
115
+ activeVersion: WorkflowVersionSummary | null;
116
+ activePinCount: number;
117
+ }
118
+
119
+ export interface WorkflowDetail extends Omit<WorkflowSummary, "draft"> {
120
+ draft: WorkflowDraft | null;
121
+ versions: WorkflowVersionSummary[];
122
+ fixtures: WorkflowFixture[];
123
+ }
124
+
125
+ export interface WorkflowListResponse {
126
+ workflows: WorkflowSummary[];
127
+ }
128
+
129
+ export interface WorkflowResponse {
130
+ workflow: WorkflowDetail;
131
+ }
132
+
133
+ export interface WorkflowVersionResponse {
134
+ version: WorkflowVersionSummary & { graph: WorkflowGraph };
135
+ }
136
+
137
+ export interface WorkflowCreateResponse {
138
+ workflowId: string;
139
+ draftId: string;
140
+ revision: number;
141
+ }
142
+
143
+ export interface WorkflowSaveResponse {
144
+ draftId: string;
145
+ revision: number;
146
+ graphDigest: string;
147
+ validation: WorkflowValidation;
148
+ }
149
+
150
+ export interface WorkflowValidationResponse {
151
+ revision: number;
152
+ graphDigest: string;
153
+ validation: WorkflowValidation;
154
+ }
155
+
156
+ export interface WorkflowTestStep {
157
+ nodeId?: string;
158
+ node_id?: string;
159
+ state?: string;
160
+ }
161
+
162
+ export interface WorkflowTestResponse {
163
+ testRunId: string;
164
+ status: "passed" | "failed";
165
+ graphDigest: string;
166
+ result?: {
167
+ terminalCode?: string;
168
+ terminal_code?: string;
169
+ steps?: WorkflowTestStep[];
170
+ };
171
+ }
172
+
173
+ export interface WorkflowPublishResponse {
174
+ workflowId: string;
175
+ versionId: string;
176
+ version: number;
177
+ artifactId: string;
178
+ bundleDigest: string;
179
+ }
180
+
181
+ export interface QueueListItem {
182
+ id: string;
183
+ name: string;
184
+ status: string;
185
+ }
186
+
187
+ export interface QueueListResponse {
188
+ queues: QueueListItem[];
189
+ }
190
+
191
+ export interface WorkflowPinResponse {
192
+ pinId: string;
193
+ workflowVersionId: string;
194
+ mode: "primary" | "shadow";
195
+ }
196
+
197
+ export type StudioConsoleState =
198
+ | { kind: "message"; heading: string; detail: string }
199
+ | { kind: "validation"; heading: string; validation: WorkflowValidation }
200
+ | { kind: "test"; fixtureName: string; result: WorkflowTestResponse }
201
+ | { kind: "pin"; heading: string; detail: string };
@@ -0,0 +1,18 @@
1
+ node_modules/
2
+ .wrangler/
3
+ coverage/
4
+ dist/
5
+ .dev.vars
6
+ .safest/secrets.env
7
+ backups/
8
+ exports/
9
+ *.log
10
+ .DS_Store
11
+ .env
12
+ .env.*
13
+ !.env.example
14
+ .safest/
15
+ dogfood-output/
16
+ test-zone/dogfood-output/
17
+ test-results/
18
+ playwright-report/