@xfey/tutti 0.1.111 → 0.1.113

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 (67) hide show
  1. package/dist/approvals/decision-command.d.ts +2 -2
  2. package/dist/chat-assistant/index.d.ts +1 -1
  3. package/dist/chat-assistant/index.js +19 -6
  4. package/dist/collaboration-ingestion/clarification.d.ts +25 -0
  5. package/dist/collaboration-ingestion/clarification.js +63 -0
  6. package/dist/collaboration-ingestion/external-source.d.ts +2 -0
  7. package/dist/collaboration-ingestion/external-source.js +35 -0
  8. package/dist/collaboration-ingestion/index.d.ts +2 -0
  9. package/dist/collaboration-ingestion/index.js +2 -0
  10. package/dist/collaboration-ingestion/platform-clarification.d.ts +10 -0
  11. package/dist/collaboration-ingestion/platform-clarification.js +42 -0
  12. package/dist/collaboration-state/clarification-messages.js +3 -2
  13. package/dist/collaboration-state/clarification-records.d.ts +1 -1
  14. package/dist/collaboration-state/clarification-records.js +7 -5
  15. package/dist/collaboration-state/clarification-rounds.js +5 -5
  16. package/dist/collaboration-state/clarification-snapshot.d.ts +228 -0
  17. package/dist/collaboration-state/clarification-snapshot.js +29 -0
  18. package/dist/collaboration-state/clarification-successors.js +6 -6
  19. package/dist/collaboration-state/index.d.ts +1 -0
  20. package/dist/collaboration-state/index.js +1 -0
  21. package/dist/collaboration-state/run-recording.js +1 -1
  22. package/dist/collaboration-state/task-compile-context.d.ts +1 -1
  23. package/dist/collaboration-state/types.d.ts +1 -0
  24. package/dist/control-plane/clarification-commands.d.ts +3 -2
  25. package/dist/control-plane/clarification-commands.js +13 -4
  26. package/dist/control-plane/follow-up-context.js +8 -14
  27. package/dist/control-plane/index.d.ts +3 -2
  28. package/dist/control-plane/task-compile-clarification-context.js +7 -2
  29. package/dist/control-plane/types.d.ts +1 -0
  30. package/dist/control-plane/workflows/openai.js +5 -4
  31. package/dist/platform-outbound/repository.js +83 -4
  32. package/dist/server-shell/cli/host-lifecycle.js +1 -0
  33. package/dist/server-shell/cli/host-server-runtime.d.ts +2 -1
  34. package/dist/server-shell/cli/host-server-runtime.js +4 -2
  35. package/dist/server-shell/cli/relay-registration.js +1 -0
  36. package/dist/server-shell/http/host-tunnel.d.ts +2 -1
  37. package/dist/server-shell/http/host-tunnel.js +4 -1
  38. package/dist/server-shell/http/integration-clarification-dispatch.d.ts +6 -0
  39. package/dist/server-shell/http/integration-clarification-dispatch.js +43 -0
  40. package/dist/server-shell/http/routes/project-api/clarification-routes.js +16 -42
  41. package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.d.ts +2 -0
  42. package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +1 -0
  43. package/dist/server-shell/http/routes/project-api/openapi.d.ts +3 -0
  44. package/dist/server-shell/http/routes/project-api/schemas.d.ts +1 -0
  45. package/migrations/0022_clarification_projection_cursors.sql +7 -0
  46. package/node_modules/@tutti/relay-client/dist/host-control.d.ts +1 -0
  47. package/node_modules/@tutti/relay-client/dist/host-control.js +3 -0
  48. package/node_modules/@tutti/shared/dist/schemas/api/clarifications.d.ts +13 -1
  49. package/node_modules/@tutti/shared/dist/schemas/api/clarifications.js +9 -2
  50. package/node_modules/@tutti/shared/dist/schemas/internal/index.d.ts +2 -0
  51. package/node_modules/@tutti/shared/dist/schemas/internal/index.js +2 -0
  52. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification-content.d.ts +15 -0
  53. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification-content.js +24 -0
  54. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification.d.ts +354 -0
  55. package/node_modules/@tutti/shared/dist/schemas/internal/platform-clarification.js +94 -0
  56. package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.d.ts +89 -3
  57. package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.js +15 -3
  58. package/node_modules/@tutti/shared/dist/utils/clarification-participants.d.ts +4 -0
  59. package/node_modules/@tutti/shared/dist/utils/clarification-participants.js +11 -0
  60. package/node_modules/@tutti/shared/dist/utils/index.d.ts +1 -0
  61. package/node_modules/@tutti/shared/dist/utils/index.js +1 -0
  62. package/package.json +1 -1
  63. package/prompts/procedures/follow-up-check.md +4 -4
  64. package/web/assets/{homepage-motion-scene-TmkKf8wQ.js → homepage-motion-scene-BwdH6Iss.js} +1 -1
  65. package/web/assets/index-B29RuNsd.js +69 -0
  66. package/web/index.html +1 -1
  67. package/web/assets/index-B1oL1p9_.js +0 -69
@@ -14,6 +14,7 @@ export declare const PlatformConversationLocatorSchema: import("@sinclair/typebo
14
14
  conversation_ref: import("@sinclair/typebox").TString;
15
15
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
16
16
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
17
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
17
18
  }>;
18
19
  export declare const ExternalMessageLocatorSchema: import("@sinclair/typebox").TObject<{
19
20
  conversation: import("@sinclair/typebox").TObject<{
@@ -24,6 +25,7 @@ export declare const ExternalMessageLocatorSchema: import("@sinclair/typebox").T
24
25
  conversation_ref: import("@sinclair/typebox").TString;
25
26
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
26
27
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
28
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
27
29
  }>;
28
30
  message_ref: import("@sinclair/typebox").TString;
29
31
  }>;
@@ -213,6 +215,7 @@ export declare const PreIdentityReferenceAttachmentSourceSchema: import("@sincla
213
215
  conversation_ref: import("@sinclair/typebox").TString;
214
216
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
215
217
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
218
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
216
219
  }>;
217
220
  message_ref: import("@sinclair/typebox").TString;
218
221
  }>;
@@ -253,6 +256,7 @@ export declare const NormalizedConversationSourceSchema: import("@sinclair/typeb
253
256
  conversation_ref: import("@sinclair/typebox").TString;
254
257
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
255
258
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
259
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
256
260
  }>;
257
261
  message_ref: import("@sinclair/typebox").TString;
258
262
  }>;
@@ -329,6 +333,7 @@ export declare const PreIdentityNormalizedConversationSourceSchema: import("@sin
329
333
  conversation_ref: import("@sinclair/typebox").TString;
330
334
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
331
335
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
336
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
332
337
  }>;
333
338
  message_ref: import("@sinclair/typebox").TString;
334
339
  }>;
@@ -398,6 +403,7 @@ export declare const ExternalConversationRevisionObservationSchema: import("@sin
398
403
  conversation_ref: import("@sinclair/typebox").TString;
399
404
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
400
405
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
406
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
401
407
  }>;
402
408
  message_ref: import("@sinclair/typebox").TString;
403
409
  }>;
@@ -456,6 +462,7 @@ export declare const ExternalConversationRevisionObservationSchema: import("@sin
456
462
  conversation_ref: import("@sinclair/typebox").TString;
457
463
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
458
464
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
465
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
459
466
  }>;
460
467
  message_ref: import("@sinclair/typebox").TString;
461
468
  }>;
@@ -514,6 +521,7 @@ export declare const ConversationSourceIngestionEnvelopeSchema: import("@sinclai
514
521
  conversation_ref: import("@sinclair/typebox").TString;
515
522
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
516
523
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
524
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
517
525
  }>;
518
526
  message_ref: import("@sinclair/typebox").TString;
519
527
  }>;
@@ -609,6 +617,7 @@ export declare const ConversationRevisionIngestionEnvelopeSchema: import("@sincl
609
617
  conversation_ref: import("@sinclair/typebox").TString;
610
618
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
611
619
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
620
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
612
621
  }>;
613
622
  message_ref: import("@sinclair/typebox").TString;
614
623
  }>;
@@ -667,6 +676,7 @@ export declare const ConversationRevisionIngestionEnvelopeSchema: import("@sincl
667
676
  conversation_ref: import("@sinclair/typebox").TString;
668
677
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
669
678
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
679
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
670
680
  }>;
671
681
  message_ref: import("@sinclair/typebox").TString;
672
682
  }>;
@@ -715,6 +725,7 @@ export declare const ConversationIngestionEnvelopeSchema: import("@sinclair/type
715
725
  conversation_ref: import("@sinclair/typebox").TString;
716
726
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
717
727
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
728
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
718
729
  }>;
719
730
  message_ref: import("@sinclair/typebox").TString;
720
731
  }>;
@@ -809,6 +820,7 @@ export declare const ConversationIngestionEnvelopeSchema: import("@sinclair/type
809
820
  conversation_ref: import("@sinclair/typebox").TString;
810
821
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
811
822
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
823
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
812
824
  }>;
813
825
  message_ref: import("@sinclair/typebox").TString;
814
826
  }>;
@@ -867,6 +879,7 @@ export declare const ConversationIngestionEnvelopeSchema: import("@sinclair/type
867
879
  conversation_ref: import("@sinclair/typebox").TString;
868
880
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
869
881
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
882
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
870
883
  }>;
871
884
  message_ref: import("@sinclair/typebox").TString;
872
885
  }>;
@@ -906,13 +919,13 @@ export declare const IntegrationDeliveryDispositionSchema: import("@sinclair/typ
906
919
  }>, import("@sinclair/typebox").TObject<{
907
920
  kind: import("@sinclair/typebox").TLiteral<"host_incompatible">;
908
921
  retryable: import("@sinclair/typebox").TLiteral<true>;
909
- reason_code: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"integration_source_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_attachment_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_managed_reference_ingestion_unsupported">]>;
922
+ reason_code: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"integration_source_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_attachment_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_managed_reference_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_clarification_unsupported">]>;
910
923
  }>, import("@sinclair/typebox").TObject<{
911
924
  kind: import("@sinclair/typebox").TLiteral<"invalid">;
912
925
  reason_code: import("@sinclair/typebox").TString;
913
926
  }>]>;
914
927
  export declare const IntegrationConversationSourceDeliveryRequestSchema: import("@sinclair/typebox").TObject<{
915
- protocol_version: import("@sinclair/typebox").TLiteral<2>;
928
+ protocol_version: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<2>, import("@sinclair/typebox").TLiteral<3>]>;
916
929
  command_id: import("@sinclair/typebox").TString;
917
930
  relay_project_ref: import("@sinclair/typebox").TString;
918
931
  binding_ref: import("@sinclair/typebox").TString;
@@ -943,6 +956,7 @@ export declare const IntegrationConversationSourceDeliveryRequestSchema: import(
943
956
  conversation_ref: import("@sinclair/typebox").TString;
944
957
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
945
958
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
959
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
946
960
  }>;
947
961
  message_ref: import("@sinclair/typebox").TString;
948
962
  }>;
@@ -1001,6 +1015,7 @@ export declare const IntegrationConversationSourceDeliveryRequestSchema: import(
1001
1015
  observed_at: import("@sinclair/typebox").TString;
1002
1016
  adapter_version: import("@sinclair/typebox").TString;
1003
1017
  }>;
1018
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1004
1019
  }>;
1005
1020
  export declare const IntegrationReferenceAttachmentStageRequestSchema: import("@sinclair/typebox").TObject<{
1006
1021
  protocol_version: import("@sinclair/typebox").TLiteral<1>;
@@ -1028,6 +1043,7 @@ export declare const IntegrationReferenceAttachmentStageRequestSchema: import("@
1028
1043
  conversation_ref: import("@sinclair/typebox").TString;
1029
1044
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1030
1045
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1046
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1031
1047
  }>;
1032
1048
  message_ref: import("@sinclair/typebox").TString;
1033
1049
  }>;
@@ -1524,6 +1540,7 @@ export declare const TrustedConversationSourceIngestionCommandSchema: import("@s
1524
1540
  conversation_ref: import("@sinclair/typebox").TString;
1525
1541
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1526
1542
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1543
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1527
1544
  }>;
1528
1545
  message_ref: import("@sinclair/typebox").TString;
1529
1546
  }>;
@@ -1584,6 +1601,7 @@ export declare const TrustedConversationSourceIngestionCommandSchema: import("@s
1584
1601
  observed_at: import("@sinclair/typebox").TString;
1585
1602
  adapter_version: import("@sinclair/typebox").TString;
1586
1603
  }>;
1604
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1587
1605
  }>;
1588
1606
  export declare const IntegrationReferenceAttachmentDeliveryRequestSchema: import("@sinclair/typebox").TObject<{
1589
1607
  protocol_version: import("@sinclair/typebox").TLiteral<1>;
@@ -1611,6 +1629,7 @@ export declare const IntegrationReferenceAttachmentDeliveryRequestSchema: import
1611
1629
  conversation_ref: import("@sinclair/typebox").TString;
1612
1630
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1613
1631
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1632
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1614
1633
  }>;
1615
1634
  message_ref: import("@sinclair/typebox").TString;
1616
1635
  }>;
@@ -1689,6 +1708,7 @@ export declare const TrustedReferenceAttachmentIngestionCommandSchema: import("@
1689
1708
  conversation_ref: import("@sinclair/typebox").TString;
1690
1709
  thread_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1691
1710
  parent_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1711
+ root_message_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1692
1712
  }>;
1693
1713
  message_ref: import("@sinclair/typebox").TString;
1694
1714
  }>;
@@ -1774,7 +1794,7 @@ export declare const IntegrationConversationSourceDeliveryResponseSchema: import
1774
1794
  }>, import("@sinclair/typebox").TObject<{
1775
1795
  kind: import("@sinclair/typebox").TLiteral<"host_incompatible">;
1776
1796
  retryable: import("@sinclair/typebox").TLiteral<true>;
1777
- reason_code: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"integration_source_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_attachment_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_managed_reference_ingestion_unsupported">]>;
1797
+ reason_code: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"integration_source_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_attachment_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_managed_reference_ingestion_unsupported">, import("@sinclair/typebox").TLiteral<"integration_clarification_unsupported">]>;
1778
1798
  }>, import("@sinclair/typebox").TObject<{
1779
1799
  kind: import("@sinclair/typebox").TLiteral<"invalid">;
1780
1800
  reason_code: import("@sinclair/typebox").TString;
@@ -1806,6 +1826,7 @@ export declare const PlatformOutboundApprovalRequestContentSchema: import("@sinc
1806
1826
  export declare const PlatformOutboundContentSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
1807
1827
  kind: import("@sinclair/typebox").TLiteral<"text">;
1808
1828
  text: import("@sinclair/typebox").TString;
1829
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1809
1830
  }>, import("@sinclair/typebox").TObject<{
1810
1831
  kind: import("@sinclair/typebox").TLiteral<"approval_request">;
1811
1832
  approval_id: import("@sinclair/typebox").TString;
@@ -1821,6 +1842,16 @@ export declare const PlatformOutboundContentSchema: import("@sinclair/typebox").
1821
1842
  label: import("@sinclair/typebox").TString;
1822
1843
  tone: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"primary">, import("@sinclair/typebox").TLiteral<"neutral">, import("@sinclair/typebox").TLiteral<"danger">]>;
1823
1844
  }>>;
1845
+ }>, import("@sinclair/typebox").TObject<{
1846
+ kind: import("@sinclair/typebox").TLiteral<"clarification">;
1847
+ round_id: import("@sinclair/typebox").TString;
1848
+ version: import("@sinclair/typebox").TInteger;
1849
+ answer_revision: import("@sinclair/typebox").TInteger;
1850
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
1851
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"submitted">, import("@sinclair/typebox").TLiteral<"continued">, import("@sinclair/typebox").TLiteral<"closed">]>;
1852
+ title: import("@sinclair/typebox").TString;
1853
+ request: import("@sinclair/typebox").TString;
1854
+ opened_at: import("@sinclair/typebox").TString;
1824
1855
  }>]>;
1825
1856
  export declare const PlatformOutboundEventSchema: import("@sinclair/typebox").TObject<{
1826
1857
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"chat_response">, import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"task_completed">, import("@sinclair/typebox").TLiteral<"task_failed">]>;
@@ -1847,6 +1878,7 @@ export declare const PlatformOutboundIntentSchema: import("@sinclair/typebox").T
1847
1878
  readonly content: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
1848
1879
  kind: import("@sinclair/typebox").TLiteral<"text">;
1849
1880
  text: import("@sinclair/typebox").TString;
1881
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1850
1882
  }>, import("@sinclair/typebox").TObject<{
1851
1883
  kind: import("@sinclair/typebox").TLiteral<"approval_request">;
1852
1884
  approval_id: import("@sinclair/typebox").TString;
@@ -1862,6 +1894,16 @@ export declare const PlatformOutboundIntentSchema: import("@sinclair/typebox").T
1862
1894
  label: import("@sinclair/typebox").TString;
1863
1895
  tone: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"primary">, import("@sinclair/typebox").TLiteral<"neutral">, import("@sinclair/typebox").TLiteral<"danger">]>;
1864
1896
  }>>;
1897
+ }>, import("@sinclair/typebox").TObject<{
1898
+ kind: import("@sinclair/typebox").TLiteral<"clarification">;
1899
+ round_id: import("@sinclair/typebox").TString;
1900
+ version: import("@sinclair/typebox").TInteger;
1901
+ answer_revision: import("@sinclair/typebox").TInteger;
1902
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
1903
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"submitted">, import("@sinclair/typebox").TLiteral<"continued">, import("@sinclair/typebox").TLiteral<"closed">]>;
1904
+ title: import("@sinclair/typebox").TString;
1905
+ request: import("@sinclair/typebox").TString;
1906
+ opened_at: import("@sinclair/typebox").TString;
1865
1907
  }>]>;
1866
1908
  readonly event: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1867
1909
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"chat_response">, import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"task_completed">, import("@sinclair/typebox").TLiteral<"task_failed">]>;
@@ -1892,6 +1934,7 @@ export declare const RelayAuthorizedPlatformOutboundIntentSchema: import("@sincl
1892
1934
  content: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
1893
1935
  kind: import("@sinclair/typebox").TLiteral<"text">;
1894
1936
  text: import("@sinclair/typebox").TString;
1937
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1895
1938
  }>, import("@sinclair/typebox").TObject<{
1896
1939
  kind: import("@sinclair/typebox").TLiteral<"approval_request">;
1897
1940
  approval_id: import("@sinclair/typebox").TString;
@@ -1907,6 +1950,16 @@ export declare const RelayAuthorizedPlatformOutboundIntentSchema: import("@sincl
1907
1950
  label: import("@sinclair/typebox").TString;
1908
1951
  tone: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"primary">, import("@sinclair/typebox").TLiteral<"neutral">, import("@sinclair/typebox").TLiteral<"danger">]>;
1909
1952
  }>>;
1953
+ }>, import("@sinclair/typebox").TObject<{
1954
+ kind: import("@sinclair/typebox").TLiteral<"clarification">;
1955
+ round_id: import("@sinclair/typebox").TString;
1956
+ version: import("@sinclair/typebox").TInteger;
1957
+ answer_revision: import("@sinclair/typebox").TInteger;
1958
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
1959
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"submitted">, import("@sinclair/typebox").TLiteral<"continued">, import("@sinclair/typebox").TLiteral<"closed">]>;
1960
+ title: import("@sinclair/typebox").TString;
1961
+ request: import("@sinclair/typebox").TString;
1962
+ opened_at: import("@sinclair/typebox").TString;
1910
1963
  }>]>;
1911
1964
  event: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1912
1965
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"chat_response">, import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"task_completed">, import("@sinclair/typebox").TLiteral<"task_failed">]>;
@@ -1936,6 +1989,7 @@ export declare const PlatformOutboundTextIntentSchema: import("@sinclair/typebox
1936
1989
  readonly content: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
1937
1990
  kind: import("@sinclair/typebox").TLiteral<"text">;
1938
1991
  text: import("@sinclair/typebox").TString;
1992
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1939
1993
  }>, import("@sinclair/typebox").TObject<{
1940
1994
  kind: import("@sinclair/typebox").TLiteral<"approval_request">;
1941
1995
  approval_id: import("@sinclair/typebox").TString;
@@ -1951,6 +2005,16 @@ export declare const PlatformOutboundTextIntentSchema: import("@sinclair/typebox
1951
2005
  label: import("@sinclair/typebox").TString;
1952
2006
  tone: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"primary">, import("@sinclair/typebox").TLiteral<"neutral">, import("@sinclair/typebox").TLiteral<"danger">]>;
1953
2007
  }>>;
2008
+ }>, import("@sinclair/typebox").TObject<{
2009
+ kind: import("@sinclair/typebox").TLiteral<"clarification">;
2010
+ round_id: import("@sinclair/typebox").TString;
2011
+ version: import("@sinclair/typebox").TInteger;
2012
+ answer_revision: import("@sinclair/typebox").TInteger;
2013
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
2014
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"submitted">, import("@sinclair/typebox").TLiteral<"continued">, import("@sinclair/typebox").TLiteral<"closed">]>;
2015
+ title: import("@sinclair/typebox").TString;
2016
+ request: import("@sinclair/typebox").TString;
2017
+ opened_at: import("@sinclair/typebox").TString;
1954
2018
  }>]>;
1955
2019
  readonly event: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1956
2020
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"chat_response">, import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"task_completed">, import("@sinclair/typebox").TLiteral<"task_failed">]>;
@@ -1981,6 +2045,7 @@ export declare const RelayAuthorizedPlatformOutboundTextIntentSchema: import("@s
1981
2045
  content: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
1982
2046
  kind: import("@sinclair/typebox").TLiteral<"text">;
1983
2047
  text: import("@sinclair/typebox").TString;
2048
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1984
2049
  }>, import("@sinclair/typebox").TObject<{
1985
2050
  kind: import("@sinclair/typebox").TLiteral<"approval_request">;
1986
2051
  approval_id: import("@sinclair/typebox").TString;
@@ -1996,6 +2061,16 @@ export declare const RelayAuthorizedPlatformOutboundTextIntentSchema: import("@s
1996
2061
  label: import("@sinclair/typebox").TString;
1997
2062
  tone: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"primary">, import("@sinclair/typebox").TLiteral<"neutral">, import("@sinclair/typebox").TLiteral<"danger">]>;
1998
2063
  }>>;
2064
+ }>, import("@sinclair/typebox").TObject<{
2065
+ kind: import("@sinclair/typebox").TLiteral<"clarification">;
2066
+ round_id: import("@sinclair/typebox").TString;
2067
+ version: import("@sinclair/typebox").TInteger;
2068
+ answer_revision: import("@sinclair/typebox").TInteger;
2069
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
2070
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"submitted">, import("@sinclair/typebox").TLiteral<"continued">, import("@sinclair/typebox").TLiteral<"closed">]>;
2071
+ title: import("@sinclair/typebox").TString;
2072
+ request: import("@sinclair/typebox").TString;
2073
+ opened_at: import("@sinclair/typebox").TString;
1999
2074
  }>]>;
2000
2075
  event: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
2001
2076
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"chat_response">, import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"task_completed">, import("@sinclair/typebox").TLiteral<"task_failed">]>;
@@ -2188,6 +2263,7 @@ export declare const IntegrationOutboundClaimResponseSchema: import("@sinclair/t
2188
2263
  content: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
2189
2264
  kind: import("@sinclair/typebox").TLiteral<"text">;
2190
2265
  text: import("@sinclair/typebox").TString;
2266
+ clarification_round_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
2191
2267
  }>, import("@sinclair/typebox").TObject<{
2192
2268
  kind: import("@sinclair/typebox").TLiteral<"approval_request">;
2193
2269
  approval_id: import("@sinclair/typebox").TString;
@@ -2203,6 +2279,16 @@ export declare const IntegrationOutboundClaimResponseSchema: import("@sinclair/t
2203
2279
  label: import("@sinclair/typebox").TString;
2204
2280
  tone: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"primary">, import("@sinclair/typebox").TLiteral<"neutral">, import("@sinclair/typebox").TLiteral<"danger">]>;
2205
2281
  }>>;
2282
+ }>, import("@sinclair/typebox").TObject<{
2283
+ kind: import("@sinclair/typebox").TLiteral<"clarification">;
2284
+ round_id: import("@sinclair/typebox").TString;
2285
+ version: import("@sinclair/typebox").TInteger;
2286
+ answer_revision: import("@sinclair/typebox").TInteger;
2287
+ closed_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"resolved">, import("@sinclair/typebox").TLiteral<"contract_changed">, import("@sinclair/typebox").TLiteral<"cancelled">]>>;
2288
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"writable">, import("@sinclair/typebox").TLiteral<"submitted">, import("@sinclair/typebox").TLiteral<"continued">, import("@sinclair/typebox").TLiteral<"closed">]>;
2289
+ title: import("@sinclair/typebox").TString;
2290
+ request: import("@sinclair/typebox").TString;
2291
+ opened_at: import("@sinclair/typebox").TString;
2206
2292
  }>]>;
2207
2293
  event: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
2208
2294
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"chat_response">, import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"task_completed">, import("@sinclair/typebox").TLiteral<"task_failed">]>;
@@ -1,7 +1,8 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import { Value } from "@sinclair/typebox/value";
3
3
  import { ExternalReferenceDescriptorSchema } from "../api/external-references.js";
4
- import { IdempotencyKeySchema, IsoDateTimeStringSchema, MessageIdSchema, RelayAccountRefSchema, RelayProjectRefSchema, } from "../domain/index.js";
4
+ import { PlatformClarificationContentSchema } from "./platform-clarification-content.js";
5
+ import { IdempotencyKeySchema, ClarificationRoundRefSchema, IsoDateTimeStringSchema, MessageIdSchema, RelayAccountRefSchema, RelayProjectRefSchema, } from "../domain/index.js";
5
6
  import { MAX_REFERENCE_STAGED_UPLOAD_BYTES, PresignedUploadPutSchema, ReferenceStagedUploadReferenceProperties, RelayUploadProjectionSchema, } from "../api/uploads.js";
6
7
  export const PlatformAdapterKeySchema = Type.String({
7
8
  minLength: 1,
@@ -27,6 +28,7 @@ export const PlatformConversationLocatorSchema = Type.Object({
27
28
  conversation_ref: ExternalObjectRefSchema,
28
29
  thread_ref: Type.Optional(ExternalObjectRefSchema),
29
30
  parent_message_ref: Type.Optional(ExternalObjectRefSchema),
31
+ root_message_ref: Type.Optional(ExternalObjectRefSchema),
30
32
  }, { additionalProperties: false });
31
33
  export const ExternalMessageLocatorSchema = Type.Object({
32
34
  conversation: PlatformConversationLocatorSchema,
@@ -244,6 +246,7 @@ export const IntegrationDeliveryDispositionSchema = Type.Union([
244
246
  Type.Literal("integration_source_ingestion_unsupported"),
245
247
  Type.Literal("integration_attachment_ingestion_unsupported"),
246
248
  Type.Literal("integration_managed_reference_ingestion_unsupported"),
249
+ Type.Literal("integration_clarification_unsupported"),
247
250
  ]),
248
251
  }, { additionalProperties: false }),
249
252
  Type.Object({
@@ -252,12 +255,13 @@ export const IntegrationDeliveryDispositionSchema = Type.Union([
252
255
  }, { additionalProperties: false }),
253
256
  ]);
254
257
  export const IntegrationConversationSourceDeliveryRequestSchema = Type.Object({
255
- protocol_version: Type.Literal(2),
258
+ protocol_version: Type.Union([Type.Literal(2), Type.Literal(3)]),
256
259
  command_id: IdempotencyKeySchema,
257
260
  relay_project_ref: RelayProjectRefSchema,
258
261
  binding_ref: IntegrationOwnedRefSchema,
259
262
  receipt: InboundIntegrationEventReceiptSchema,
260
263
  source: PreIdentityNormalizedConversationSourceSchema,
264
+ clarification_round_ref: Type.Optional(ClarificationRoundRefSchema),
261
265
  }, { additionalProperties: false });
262
266
  export const IntegrationReferenceAttachmentStageRequestSchema = Type.Object({
263
267
  protocol_version: Type.Literal(1),
@@ -463,6 +467,7 @@ export const TrustedConversationSourceIngestionCommandSchema = Type.Object({
463
467
  TrustedDevelopmentBotActorContextSchema,
464
468
  ]),
465
469
  source: NormalizedConversationSourceSchema,
470
+ clarification_round_ref: Type.Optional(ClarificationRoundRefSchema),
466
471
  }, { additionalProperties: false });
467
472
  export const IntegrationReferenceAttachmentDeliveryRequestSchema = Type.Object({
468
473
  protocol_version: Type.Literal(1),
@@ -512,6 +517,7 @@ export const IntegrationConversationSourceDeliveryResponseSchema = Type.Object({
512
517
  const PlatformOutboundTextContentSchema = Type.Object({
513
518
  kind: Type.Literal("text"),
514
519
  text: Type.String({ minLength: 1, maxLength: 4_000 }),
520
+ clarification_round_ref: Type.Optional(ClarificationRoundRefSchema),
515
521
  }, { additionalProperties: false });
516
522
  export const PlatformApprovalCardRevisionSchema = Type.String({
517
523
  minLength: 1,
@@ -546,6 +552,7 @@ export const PlatformOutboundApprovalRequestContentSchema = Type.Object({
546
552
  export const PlatformOutboundContentSchema = Type.Union([
547
553
  PlatformOutboundTextContentSchema,
548
554
  PlatformOutboundApprovalRequestContentSchema,
555
+ PlatformClarificationContentSchema,
549
556
  ]);
550
557
  export const PlatformOutboundEventSchema = Type.Object({
551
558
  kind: Type.Union([
@@ -768,7 +775,12 @@ export function isIntegrationConversationSourceDeliveryRequest(value) {
768
775
  const request = value;
769
776
  const sourceInstallation = request.source.locator.conversation.installation;
770
777
  const sourceSubject = request.source.author.external_subject;
771
- return (request.receipt.event_kind === "conversation_source" &&
778
+ return ((request.clarification_round_ref === undefined
779
+ ? request.protocol_version === 2
780
+ : request.protocol_version === 3 &&
781
+ (request.source.locator.conversation.parent_message_ref !== undefined ||
782
+ request.source.locator.conversation.root_message_ref !== undefined)) &&
783
+ request.receipt.event_kind === "conversation_source" &&
772
784
  (sourceSubject.subject_kind === "human" || sourceSubject.subject_kind === "bot") &&
773
785
  sameInstallation(request.receipt.installation, sourceInstallation) &&
774
786
  sameInstallation(request.receipt.installation, sourceSubject.installation));
@@ -0,0 +1,4 @@
1
+ import type { MessageProjection } from "../schemas/api/index.js";
2
+ /** Only explicit user input counts as an answer, never an ordinary system notice. */
3
+ export declare function clarificationAnswerRole(message: Pick<MessageProjection, "author" | "message_kind" | "refs">): "human" | "operator" | null;
4
+ //# sourceMappingURL=clarification-participants.d.ts.map
@@ -0,0 +1,11 @@
1
+ /** Only explicit user input counts as an answer, never an ordinary system notice. */
2
+ export function clarificationAnswerRole(message) {
3
+ if (message.message_kind !== "user_text")
4
+ return null;
5
+ if (message.author.kind === "human")
6
+ return "human";
7
+ return message.author.kind === "system" && message.refs?.development_operator === true
8
+ ? "operator"
9
+ : null;
10
+ }
11
+ //# sourceMappingURL=clarification-participants.js.map
@@ -1,4 +1,5 @@
1
1
  export * from "./command-idempotency/index.js";
2
+ export * from "./clarification-participants.js";
2
3
  export * from "./feishu-diagnostics/index.js";
3
4
  export * from "./logging/index.js";
4
5
  export * from "./path-policy/index.js";
@@ -1,4 +1,5 @@
1
1
  export * from "./command-idempotency/index.js";
2
+ export * from "./clarification-participants.js";
2
3
  export * from "./feishu-diagnostics/index.js";
3
4
  export * from "./logging/index.js";
4
5
  export * from "./path-policy/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xfey/tutti",
3
- "version": "0.1.111",
3
+ "version": "0.1.113",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -8,11 +8,11 @@ model_path: openai.sdk.structured_output
8
8
 
9
9
  You run Tutti `follow_up_check`.
10
10
 
11
- Decide whether submitted human answers to a task-bound clarification allow the same frozen task contract to continue.
11
+ Decide whether submitted participant answers to a task-bound clarification allow the same frozen task contract to continue.
12
12
 
13
13
  # Inputs
14
14
 
15
- `workflow_input_json` contains the task contract, the previous Run pause reason, the original clarification request, and submitted human answers:
15
+ `workflow_input_json` contains the task contract, the previous Run pause reason, the original clarification request, and submitted participant answers:
16
16
 
17
17
  ```json
18
18
  {{workflow_input_json}}
@@ -28,12 +28,12 @@ Fields:
28
28
  - `title`: short request title, when available.
29
29
  - `summary`: why the Run needed human input.
30
30
  - `request`: the concrete question that needed an answer.
31
- - `answers`: submitted human answer texts for this clarification round, in message order.
31
+ - `answers`: sealed answers for this clarification round, in message order. Each item has `role` (`human` or an authorized `operator`) and `text`. Preserve that provenance; an operator answer is not a claim that a human took the action.
32
32
 
33
33
  # Decision Rules
34
34
 
35
35
  - `workflow_input_json` is the complete context for this decision.
36
- - Treat `goal` and `scope` as the frozen task contract, `previous_run.summary` and `previous_run.clarification_request_payload` as the identified human decision, and `answers` as the submitted human reply.
36
+ - Treat `goal` and `scope` as the frozen task contract, `previous_run.summary` and `previous_run.clarification_request_payload` as the identified decision, and `answers` as the submitted participant reply.
37
37
  - Evaluate only whether the answers resolve that decision within the same frozen task contract.
38
38
  - Return `resume` when the blocker is resolved without changing the contract.
39
39
  - Return `needs_more_input` when the same human decision remains unresolved but can still be answered within the contract.
@@ -1 +1 @@
1
- import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,w as x,x as S,y as C}from"./index-B1oL1p9_.js";var w=e(`mouse-pointer-2`,[[`path`,{d:`M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z`,key:`edeuup`}]]),T=e(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),E=x();function D(e){return{"--reveal":e}}function O(e,t,n){let r=(e,t)=>Number.parseInt(e.slice(t,t+2),16),i=i=>Math.round(r(e,i)+(r(t,i)-r(e,i))*n).toString(16).padStart(2,`0`);return`#${i(1)}${i(3)}${i(5)}`}function k(e){let t=r((e-p.runEnd)/(p.executionComplete-p.runEnd));return t+t*t-t*t*t}function A({progress:e,children:t,className:n=``}){return(0,E.jsx)(`div`,{className:`scene-reveal ${n}`,style:D(e),children:t})}function j({progress:e,author:t,avatar:n,tone:r,timestamp:i,online:a=!1,assets:o,children:s}){return(0,E.jsxs)(`article`,{className:`scene-message`,style:D(e),children:[(0,E.jsx)(`span`,{className:`scene-avatar is-${r} ${n===`tutti`?`is-tutti`:``} ${a?`is-online`:``}`,"aria-hidden":`true`,children:n===`tutti`?(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:o.tuttiAvatarSrc,alt:``}):(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:o.humanAvatars[n],alt:``})}),(0,E.jsxs)(`div`,{className:`scene-message-copy`,children:[(0,E.jsxs)(`header`,{children:[(0,E.jsx)(`strong`,{children:t}),(0,E.jsx)(`span`,{children:i})]}),(0,E.jsx)(`p`,{children:s})]})]})}function M({time:e,assets:r}){let i=e>=p.artifactLive,a=e>=p.artifactClick,o=e>=p.runEnd&&e<p.executionComplete,u=d(e,p.runEnd,19.2),f=d(e,p.artifactLive,30.92);return(0,E.jsxs)(`aside`,{className:`scene-sidebar`,children:[(0,E.jsx)(`button`,{className:`scene-brand`,type:`button`,"aria-label":`Tutti`,tabIndex:-1,children:(0,E.jsx)(`img`,{src:r.logoSrc,alt:``})}),(0,E.jsxs)(`div`,{className:`scene-nav-stack`,children:[(0,E.jsxs)(`nav`,{className:`scene-nav`,"aria-label":`Workspace pages`,children:[(0,E.jsx)(`button`,{className:a?``:`is-active`,type:`button`,"aria-label":`Chat`,tabIndex:-1,children:(0,E.jsx)(c,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Worklist`,tabIndex:-1,children:(0,E.jsx)(b,{"aria-hidden":`true`})}),(0,E.jsxs)(`button`,{className:a?`is-active`:``,type:`button`,"aria-label":`Artifacts`,tabIndex:-1,children:[(0,E.jsx)(l,{"aria-hidden":`true`}),i?(0,E.jsx)(`span`,{className:`scene-live-pill`,style:D(f),children:`Live`}):null]}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`References`,tabIndex:-1,children:(0,E.jsx)(C,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Skills`,tabIndex:-1,children:(0,E.jsx)(s,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Timeline`,tabIndex:-1,children:(0,E.jsx)(t,{"aria-hidden":`true`})})]}),o?(0,E.jsx)(`button`,{className:`scene-status-entry is-running`,style:D(u),type:`button`,"aria-label":`Task running`,tabIndex:-1,children:(0,E.jsx)(n,{"aria-hidden":`true`})}):null]}),(0,E.jsx)(`button`,{className:`scene-settings`,type:`button`,"aria-label":`Settings`,tabIndex:-1,children:(0,E.jsx)(h,{"aria-hidden":`true`})})]})}function N({time:e,assets:t}){let n=d(e,30.35,30.92);return(0,E.jsxs)(`section`,{className:`scene-panel scene-chat-panel`,children:[(0,E.jsxs)(`header`,{className:`scene-panel-header`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,children:(0,E.jsx)(c,{"aria-hidden":`true`})}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h2`,{children:`Morrow Studio`}),(0,E.jsx)(`p`,{children:`Ceramics storefront`})]}),(0,E.jsxs)(`span`,{className:`scene-members`,"aria-hidden":`true`,children:[(0,E.jsx)(`i`,{className:`is-green`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:t.humanAvatars.fey,alt:``})}),(0,E.jsx)(`i`,{className:`is-blue`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:t.humanAvatars.avery,alt:``})}),(0,E.jsx)(`i`,{className:`is-yellow`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:t.humanAvatars.jun,alt:``})})]})]}),(0,E.jsxs)(`div`,{className:`scene-chat-stream`,children:[(0,E.jsx)(j,{progress:d(e,1.35,2.05),author:`Fey`,avatar:`fey`,tone:`green`,timestamp:`10:12`,online:!0,assets:t,children:`🏺 Let's build an online shop for our ceramics studio.`}),(0,E.jsx)(j,{progress:d(e,2.65,3.35),author:`Avery`,avatar:`avery`,tone:`blue`,timestamp:`10:13`,online:!0,assets:t,children:`✨ Keep it warm, minimal, and editorial.`}),(0,E.jsx)(j,{progress:d(e,3.95,4.65),author:`Jun`,avatar:`jun`,tone:`yellow`,timestamp:`10:14`,online:!0,assets:t,children:`🎨 Let people preview every piece in different glazes.`}),(0,E.jsx)(j,{progress:d(e,5.25,5.95),author:`Tutti`,avatar:`tutti`,tone:`green`,timestamp:`10:15`,assets:t,children:`Got it — I'll put it together. ✨`}),(0,E.jsxs)(`article`,{className:`scene-task-result`,style:D(n),children:[(0,E.jsx)(`span`,{className:`scene-task-result-rail`,"aria-hidden":`true`}),(0,E.jsx)(`span`,{className:`scene-task-result-icon`,"aria-hidden":`true`,children:(0,E.jsx)(S,{})}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`span`,{children:`Task completed`}),(0,E.jsx)(`strong`,{children:`Build ceramics storefront`}),(0,E.jsx)(`small`,{children:`Storefront`}),(0,E.jsx)(`p`,{children:`Warm editorial shopping and glaze previews are ready in Artifacts.`})]}),(0,E.jsx)(i,{className:`scene-task-result-chevron`,"aria-hidden":`true`})]})]}),(0,E.jsxs)(`div`,{className:`scene-composer`,"aria-hidden":`true`,children:[(0,E.jsx)(`span`,{children:`Write a message`}),(0,E.jsx)(T,{})]})]})}function P({progress:e,icon:t,children:n}){return(0,E.jsxs)(`div`,{className:`scene-scratchpad-row`,style:D(e),children:[(0,E.jsx)(`span`,{"aria-hidden":`true`,children:t}),(0,E.jsx)(`p`,{children:n})]})}function F({time:e}){return(0,E.jsxs)(`section`,{className:`scene-panel scene-scratchpad-panel`,style:{"--scratchpad-collapse":d(e,p.runEnd,19.18)},children:[(0,E.jsxs)(`header`,{className:`scene-panel-header`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,children:(0,E.jsx)(v,{"aria-hidden":`true`})}),(0,E.jsx)(`h2`,{children:`Scratchpad`})]}),(0,E.jsxs)(`div`,{className:`scene-scratchpad-body`,children:[(0,E.jsxs)(A,{progress:d(e,8.95,10),className:`scene-scratchpad-intro`,children:[(0,E.jsx)(`h3`,{children:`Ceramics storefront`}),(0,E.jsx)(`p`,{children:`A warm, editorial storefront for a small-batch studio, centered on tactile product discovery.`})]}),(0,E.jsx)(A,{progress:d(e,9.85,10.65),className:`scene-scratchpad-label`,children:`Confirmed`}),(0,E.jsx)(P,{progress:d(e,10.4,11.25),icon:(0,E.jsx)(S,{}),children:`Product-first editorial layout with generous space`}),(0,E.jsx)(P,{progress:d(e,11.2,12.05),icon:(0,E.jsx)(S,{}),children:`Warm neutrals with quiet serif headlines`}),(0,E.jsx)(P,{progress:d(e,12,12.85),icon:(0,E.jsx)(S,{}),children:`Keep the collection small, curated, and story-led`}),(0,E.jsx)(A,{progress:d(e,12.75,13.55),className:`scene-scratchpad-label`,children:`Requested feature`}),(0,E.jsx)(P,{progress:d(e,13.3,14.2),icon:(0,E.jsx)(o,{}),children:`Preview every piece in clay, sage, and ink glazes`})]}),(0,E.jsxs)(`footer`,{className:`scene-scratchpad-footer`,style:D(d(e,15.7,16.8)),children:[(0,E.jsxs)(`span`,{className:`scene-writing-mark`,children:[(0,E.jsx)(`strong`,{children:`Updated`}),(0,E.jsx)(`span`,{children:`just now`})]}),(0,E.jsxs)(`button`,{className:`scene-run-button`,type:`button`,tabIndex:-1,children:[(0,E.jsx)(f,{"aria-hidden":`true`}),(0,E.jsx)(`span`,{children:`Run`})]})]})]})}function I(e,t){let n=Math.max(0,Math.floor((e-t)*50/5)*5);return`${Math.floor(n/60)}m${(n%60).toString().padStart(2,`0`)}s`}function L({time:e,scoreSrc:t}){let r=d(e,18.92,19.2),i=_(e),a=i.id===`complete`,o={prepare:p.runEnd,implement:p.executionPrepareEnd,validate:p.executionImplementEnd,update:p.executionValidateEnd,complete:p.executionComplete}[i.id],s=d(e,o,o+.32),c=k(e);return(0,E.jsx)(`div`,{className:`scene-execution`,style:{"--reveal":r,"--stage-reveal":s},children:(0,E.jsxs)(`article`,{className:`homepage-motion-panel homepage-motion-execution-panel homepage-motion-execution-card is-score-${a?`complete`:`running`}`,children:[(0,E.jsx)(`header`,{className:`homepage-motion-panel-header`,children:(0,E.jsxs)(`div`,{className:`homepage-motion-panel-title`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,"aria-hidden":`true`,children:(0,E.jsx)(y,{})}),(0,E.jsx)(`h3`,{children:`Tutti is working on`})]})}),(0,E.jsxs)(`div`,{className:`homepage-motion-execution-body`,children:[(0,E.jsxs)(`div`,{className:`homepage-motion-execution-step homepage-motion-execution-stage is-${a?`complete`:`running`} has-marker`,children:[(0,E.jsx)(`span`,{className:`homepage-motion-execution-marker ${a?`is-done`:`is-running`}`,"aria-hidden":`true`,children:a?(0,E.jsx)(S,{}):(0,E.jsx)(n,{})}),(0,E.jsx)(`span`,{className:`homepage-motion-execution-step-content homepage-motion-execution-stage-copy`,children:(0,E.jsxs)(`span`,{className:`homepage-motion-execution-step-title`,children:[(0,E.jsx)(`span`,{className:`homepage-motion-execution-step-label`,children:i.label}),a?null:(0,E.jsx)(`span`,{className:`homepage-motion-execution-step-elapsed`,children:` (${I(e,o)})`})]})},i.id)]}),(0,E.jsx)(`div`,{className:`homepage-motion-running-score ${a?`is-complete`:``}`,role:`img`,"aria-label":`Ode to Joy score phrase`,children:(0,E.jsx)(`div`,{className:`homepage-motion-score-passage`,style:{"--score-translate-x":`${-395.3*c}px`},"aria-hidden":`true`,children:(0,E.jsx)(`img`,{src:t,alt:``,draggable:!1})})})]})]})})}function R({color:e,variant:t=`vase`,className:n=``}){let r={"--ceramic-color":e};return t===`cup`?(0,E.jsxs)(`svg`,{className:`ceramic-object is-cup ${n}`,viewBox:`0 0 260 260`,style:r,"aria-hidden":`true`,children:[(0,E.jsx)(`path`,{className:`ceramic-main`,d:`M54 64h132l-9 126c-2 26-20 42-46 42h-22c-26 0-44-16-46-42Z`}),(0,E.jsx)(`path`,{className:`ceramic-outline`,d:`M186 92h18c34 0 34 72 1 76h-27`}),(0,E.jsx)(`ellipse`,{className:`ceramic-rim`,cx:`120`,cy:`64`,rx:`66`,ry:`13`}),(0,E.jsx)(`path`,{className:`ceramic-highlight`,d:`M78 90c5 62 4 91 20 114`})]}):t===`bowl`?(0,E.jsxs)(`svg`,{className:`ceramic-object is-bowl ${n}`,viewBox:`0 0 300 220`,style:r,"aria-hidden":`true`,children:[(0,E.jsx)(`ellipse`,{className:`ceramic-rim`,cx:`150`,cy:`55`,rx:`116`,ry:`24`}),(0,E.jsx)(`path`,{className:`ceramic-main`,d:`M34 55c8 82 45 132 116 132S258 137 266 55c-42 25-190 25-232 0Z`}),(0,E.jsx)(`path`,{className:`ceramic-highlight`,d:`M72 82c18 45 40 70 70 82`}),(0,E.jsx)(`path`,{className:`ceramic-base`,d:`M112 185h76`})]}):(0,E.jsxs)(`svg`,{className:`ceramic-object is-vase ${n}`,viewBox:`0 0 320 420`,style:r,"aria-hidden":`true`,children:[(0,E.jsx)(`path`,{className:`ceramic-main`,d:`M116 56c7 38-17 61-36 96-31 56-28 157 5 199 33 42 117 42 150 0 33-42 36-143 5-199-19-35-43-58-36-96Z`}),(0,E.jsx)(`ellipse`,{className:`ceramic-rim`,cx:`160`,cy:`56`,rx:`44`,ry:`12`}),(0,E.jsx)(`ellipse`,{className:`ceramic-base`,cx:`160`,cy:`365`,rx:`66`,ry:`13`}),(0,E.jsx)(`path`,{className:`ceramic-highlight`,d:`M108 153c-25 64-23 145 1 185`})]})}function z({time:e}){let t=d(e,p.artifactClick,33.25),n=d(e,34.25,34.52),r=d(e,34.88,35.15),i=d(e,35.55,35.82),a=g(e),o=O(`#d9cbb4`,`#c56f4f`,n);e>=34.88&&(o=O(`#c56f4f`,`#6f9275`,r)),e>=35.55&&(o=O(`#6f9275`,`#243a46`,i));let s=e>=35.55?`ink`:e>=34.88?`sage`:e>=34.25?`clay`:null,c={"--artifact-scroll":a};return(0,E.jsxs)(`section`,{className:`scene-panel scene-artifact-panel`,style:D(t),children:[(0,E.jsxs)(`header`,{className:`scene-panel-header`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,children:(0,E.jsx)(l,{"aria-hidden":`true`})}),(0,E.jsx)(`h2`,{children:`Artifacts`}),(0,E.jsx)(`span`,{className:`scene-ready-tag`,children:`Ready`})]}),(0,E.jsx)(`div`,{className:`scene-artifact-canvas`,children:(0,E.jsxs)(`div`,{className:`artifact-page-frame`,style:c,children:[(0,E.jsxs)(`div`,{className:`artifact-page-nav`,children:[(0,E.jsx)(`strong`,{children:`Morrow`}),(0,E.jsx)(`span`,{children:`Objects · Journal · Studio`})]}),(0,E.jsxs)(`section`,{className:`artifact-hero`,children:[(0,E.jsxs)(`div`,{className:`artifact-hero-copy`,children:[(0,E.jsx)(`span`,{className:`artifact-eyebrow`,children:`Hand-finished in small batches`}),(0,E.jsx)(`h3`,{children:`Objects for slower days.`}),(0,E.jsx)(`p`,{children:`Quiet forms, warm glazes, and useful pieces made to live with.`}),(0,E.jsx)(`button`,{type:`button`,tabIndex:-1,children:`Explore the collection`})]}),(0,E.jsxs)(`div`,{className:`artifact-hero-object`,children:[(0,E.jsx)(R,{color:o}),(0,E.jsxs)(`div`,{className:`artifact-glaze-picker`,"aria-label":`Glaze preview`,children:[(0,E.jsx)(`span`,{children:`Glaze`}),(0,E.jsx)(`i`,{className:s===`clay`?`is-active is-clay`:`is-clay`}),(0,E.jsx)(`i`,{className:s===`sage`?`is-active is-sage`:`is-sage`}),(0,E.jsx)(`i`,{className:s===`ink`?`is-active is-ink`:`is-ink`})]})]})]}),(0,E.jsxs)(`section`,{className:`artifact-collection`,children:[(0,E.jsxs)(`header`,{children:[(0,E.jsx)(`span`,{children:`Selected pieces`}),(0,E.jsx)(`p`,{children:`Everyday forms shaped for the rituals around them.`})]}),(0,E.jsxs)(`div`,{className:`artifact-product-grid`,children:[(0,E.jsxs)(`article`,{children:[(0,E.jsx)(R,{color:`#b9785f`,variant:`cup`}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`strong`,{children:`Low cup`}),(0,E.jsx)(`span`,{children:`Rust glaze`})]})]}),(0,E.jsxs)(`article`,{children:[(0,E.jsx)(R,{color:`#819283`,variant:`vase`}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`strong`,{children:`Field vase`}),(0,E.jsx)(`span`,{children:`Sage glaze`})]})]}),(0,E.jsxs)(`article`,{children:[(0,E.jsx)(R,{color:`#d5c7af`,variant:`bowl`}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`strong`,{children:`Gather bowl`}),(0,E.jsx)(`span`,{children:`Flax glaze`})]})]})]})]}),(0,E.jsxs)(`section`,{className:`artifact-studio`,children:[(0,E.jsx)(`span`,{children:`Made by hand · Meant for every day`}),(0,E.jsx)(`h3`,{children:`Useful things can still feel special.`}),(0,E.jsx)(`p`,{children:`We make a small number of considered objects, slowly and close to home.`}),(0,E.jsx)(`button`,{type:`button`,tabIndex:-1,children:`Visit the studio`})]}),(0,E.jsxs)(`footer`,{className:`artifact-page-footer`,children:[(0,E.jsx)(`strong`,{children:`Morrow Ceramics`}),(0,E.jsx)(`span`,{className:`artifact-built-with`,children:`Built with Tutti.`}),(0,E.jsx)(`span`,{children:`Small batch · Est. 2026`})]})]})})]})}function B(e,t,n){return e+(t-e)*n}function V(e,t,n,r,i){let a=d(e,t,n,m);return{x:B(r.x,i.x,a),y:B(r.y,i.y,a)}}function H(e,t,n){return e<t||e>n?0:Math.sin(Math.PI*((e-t)/(n-t)))}function U(e){if(e>=p.runCursorStart&&e<18.92){let t=V(e,p.runCursorStart,p.runCursorArrive,{x:86,y:76},{x:94.25,y:94.2});return{visible:!0,x:t.x,y:t.y,clickPulse:H(e,p.runClickStart,p.runEnd)}}if(e>=31&&e<33.45){let t=V(e,31,32.22,{x:50,y:58},{x:4,y:22.85});return{visible:!0,x:t.x,y:t.y,clickPulse:H(e,32.28,32.6)}}return{visible:!1,x:50,y:50,clickPulse:0}}function W({time:e,assets:t}){let n=u(e),r=U(e),i=a(e),o=d(e,.08,1.05,m);return(0,E.jsx)(`div`,{className:`motion-scene`,role:`img`,"aria-label":`Tutti workflow animation from team discussion to a generated ceramics storefront`,style:{opacity:i,visibility:i<=.001?`hidden`:`visible`},children:(0,E.jsxs)(`div`,{className:`motion-stage`,style:{opacity:o,transform:`translate(50%, 50%) scale(${n.scale}) translate(${-n.centerX*100}%, ${-n.centerY*100}%)`},children:[(0,E.jsx)(M,{time:e,assets:t}),(0,E.jsxs)(`div`,{className:`scene-workspace-layer`,children:[(0,E.jsx)(N,{time:e,assets:t}),(0,E.jsx)(F,{time:e}),(0,E.jsx)(L,{time:e,scoreSrc:t.scoreSrc})]}),(0,E.jsx)(z,{time:e}),(0,E.jsxs)(`span`,{className:`scene-cursor ${r.visible?`is-visible`:``}`,style:{left:`${r.x}%`,top:`${r.y}%`,"--click-pulse":r.clickPulse},"aria-hidden":`true`,children:[(0,E.jsx)(w,{}),(0,E.jsx)(`i`,{})]})]})})}export{W as HomepageMotionScene};
1
+ import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,h as l,i as u,l as d,m as f,n as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,w as x,x as S,y as C}from"./index-B29RuNsd.js";var w=e(`mouse-pointer-2`,[[`path`,{d:`M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z`,key:`edeuup`}]]),T=e(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),E=x();function D(e){return{"--reveal":e}}function O(e,t,n){let r=(e,t)=>Number.parseInt(e.slice(t,t+2),16),i=i=>Math.round(r(e,i)+(r(t,i)-r(e,i))*n).toString(16).padStart(2,`0`);return`#${i(1)}${i(3)}${i(5)}`}function k(e){let t=r((e-p.runEnd)/(p.executionComplete-p.runEnd));return t+t*t-t*t*t}function A({progress:e,children:t,className:n=``}){return(0,E.jsx)(`div`,{className:`scene-reveal ${n}`,style:D(e),children:t})}function j({progress:e,author:t,avatar:n,tone:r,timestamp:i,online:a=!1,assets:o,children:s}){return(0,E.jsxs)(`article`,{className:`scene-message`,style:D(e),children:[(0,E.jsx)(`span`,{className:`scene-avatar is-${r} ${n===`tutti`?`is-tutti`:``} ${a?`is-online`:``}`,"aria-hidden":`true`,children:n===`tutti`?(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:o.tuttiAvatarSrc,alt:``}):(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:o.humanAvatars[n],alt:``})}),(0,E.jsxs)(`div`,{className:`scene-message-copy`,children:[(0,E.jsxs)(`header`,{children:[(0,E.jsx)(`strong`,{children:t}),(0,E.jsx)(`span`,{children:i})]}),(0,E.jsx)(`p`,{children:s})]})]})}function M({time:e,assets:r}){let i=e>=p.artifactLive,a=e>=p.artifactClick,o=e>=p.runEnd&&e<p.executionComplete,u=d(e,p.runEnd,19.2),f=d(e,p.artifactLive,30.92);return(0,E.jsxs)(`aside`,{className:`scene-sidebar`,children:[(0,E.jsx)(`button`,{className:`scene-brand`,type:`button`,"aria-label":`Tutti`,tabIndex:-1,children:(0,E.jsx)(`img`,{src:r.logoSrc,alt:``})}),(0,E.jsxs)(`div`,{className:`scene-nav-stack`,children:[(0,E.jsxs)(`nav`,{className:`scene-nav`,"aria-label":`Workspace pages`,children:[(0,E.jsx)(`button`,{className:a?``:`is-active`,type:`button`,"aria-label":`Chat`,tabIndex:-1,children:(0,E.jsx)(c,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Worklist`,tabIndex:-1,children:(0,E.jsx)(b,{"aria-hidden":`true`})}),(0,E.jsxs)(`button`,{className:a?`is-active`:``,type:`button`,"aria-label":`Artifacts`,tabIndex:-1,children:[(0,E.jsx)(l,{"aria-hidden":`true`}),i?(0,E.jsx)(`span`,{className:`scene-live-pill`,style:D(f),children:`Live`}):null]}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`References`,tabIndex:-1,children:(0,E.jsx)(C,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Skills`,tabIndex:-1,children:(0,E.jsx)(s,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Timeline`,tabIndex:-1,children:(0,E.jsx)(t,{"aria-hidden":`true`})})]}),o?(0,E.jsx)(`button`,{className:`scene-status-entry is-running`,style:D(u),type:`button`,"aria-label":`Task running`,tabIndex:-1,children:(0,E.jsx)(n,{"aria-hidden":`true`})}):null]}),(0,E.jsx)(`button`,{className:`scene-settings`,type:`button`,"aria-label":`Settings`,tabIndex:-1,children:(0,E.jsx)(h,{"aria-hidden":`true`})})]})}function N({time:e,assets:t}){let n=d(e,30.35,30.92);return(0,E.jsxs)(`section`,{className:`scene-panel scene-chat-panel`,children:[(0,E.jsxs)(`header`,{className:`scene-panel-header`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,children:(0,E.jsx)(c,{"aria-hidden":`true`})}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h2`,{children:`Morrow Studio`}),(0,E.jsx)(`p`,{children:`Ceramics storefront`})]}),(0,E.jsxs)(`span`,{className:`scene-members`,"aria-hidden":`true`,children:[(0,E.jsx)(`i`,{className:`is-green`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:t.humanAvatars.fey,alt:``})}),(0,E.jsx)(`i`,{className:`is-blue`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:t.humanAvatars.avery,alt:``})}),(0,E.jsx)(`i`,{className:`is-yellow`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:t.humanAvatars.jun,alt:``})})]})]}),(0,E.jsxs)(`div`,{className:`scene-chat-stream`,children:[(0,E.jsx)(j,{progress:d(e,1.35,2.05),author:`Fey`,avatar:`fey`,tone:`green`,timestamp:`10:12`,online:!0,assets:t,children:`🏺 Let's build an online shop for our ceramics studio.`}),(0,E.jsx)(j,{progress:d(e,2.65,3.35),author:`Avery`,avatar:`avery`,tone:`blue`,timestamp:`10:13`,online:!0,assets:t,children:`✨ Keep it warm, minimal, and editorial.`}),(0,E.jsx)(j,{progress:d(e,3.95,4.65),author:`Jun`,avatar:`jun`,tone:`yellow`,timestamp:`10:14`,online:!0,assets:t,children:`🎨 Let people preview every piece in different glazes.`}),(0,E.jsx)(j,{progress:d(e,5.25,5.95),author:`Tutti`,avatar:`tutti`,tone:`green`,timestamp:`10:15`,assets:t,children:`Got it — I'll put it together. ✨`}),(0,E.jsxs)(`article`,{className:`scene-task-result`,style:D(n),children:[(0,E.jsx)(`span`,{className:`scene-task-result-rail`,"aria-hidden":`true`}),(0,E.jsx)(`span`,{className:`scene-task-result-icon`,"aria-hidden":`true`,children:(0,E.jsx)(S,{})}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`span`,{children:`Task completed`}),(0,E.jsx)(`strong`,{children:`Build ceramics storefront`}),(0,E.jsx)(`small`,{children:`Storefront`}),(0,E.jsx)(`p`,{children:`Warm editorial shopping and glaze previews are ready in Artifacts.`})]}),(0,E.jsx)(i,{className:`scene-task-result-chevron`,"aria-hidden":`true`})]})]}),(0,E.jsxs)(`div`,{className:`scene-composer`,"aria-hidden":`true`,children:[(0,E.jsx)(`span`,{children:`Write a message`}),(0,E.jsx)(T,{})]})]})}function P({progress:e,icon:t,children:n}){return(0,E.jsxs)(`div`,{className:`scene-scratchpad-row`,style:D(e),children:[(0,E.jsx)(`span`,{"aria-hidden":`true`,children:t}),(0,E.jsx)(`p`,{children:n})]})}function F({time:e}){return(0,E.jsxs)(`section`,{className:`scene-panel scene-scratchpad-panel`,style:{"--scratchpad-collapse":d(e,p.runEnd,19.18)},children:[(0,E.jsxs)(`header`,{className:`scene-panel-header`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,children:(0,E.jsx)(v,{"aria-hidden":`true`})}),(0,E.jsx)(`h2`,{children:`Scratchpad`})]}),(0,E.jsxs)(`div`,{className:`scene-scratchpad-body`,children:[(0,E.jsxs)(A,{progress:d(e,8.95,10),className:`scene-scratchpad-intro`,children:[(0,E.jsx)(`h3`,{children:`Ceramics storefront`}),(0,E.jsx)(`p`,{children:`A warm, editorial storefront for a small-batch studio, centered on tactile product discovery.`})]}),(0,E.jsx)(A,{progress:d(e,9.85,10.65),className:`scene-scratchpad-label`,children:`Confirmed`}),(0,E.jsx)(P,{progress:d(e,10.4,11.25),icon:(0,E.jsx)(S,{}),children:`Product-first editorial layout with generous space`}),(0,E.jsx)(P,{progress:d(e,11.2,12.05),icon:(0,E.jsx)(S,{}),children:`Warm neutrals with quiet serif headlines`}),(0,E.jsx)(P,{progress:d(e,12,12.85),icon:(0,E.jsx)(S,{}),children:`Keep the collection small, curated, and story-led`}),(0,E.jsx)(A,{progress:d(e,12.75,13.55),className:`scene-scratchpad-label`,children:`Requested feature`}),(0,E.jsx)(P,{progress:d(e,13.3,14.2),icon:(0,E.jsx)(o,{}),children:`Preview every piece in clay, sage, and ink glazes`})]}),(0,E.jsxs)(`footer`,{className:`scene-scratchpad-footer`,style:D(d(e,15.7,16.8)),children:[(0,E.jsxs)(`span`,{className:`scene-writing-mark`,children:[(0,E.jsx)(`strong`,{children:`Updated`}),(0,E.jsx)(`span`,{children:`just now`})]}),(0,E.jsxs)(`button`,{className:`scene-run-button`,type:`button`,tabIndex:-1,children:[(0,E.jsx)(f,{"aria-hidden":`true`}),(0,E.jsx)(`span`,{children:`Run`})]})]})]})}function I(e,t){let n=Math.max(0,Math.floor((e-t)*50/5)*5);return`${Math.floor(n/60)}m${(n%60).toString().padStart(2,`0`)}s`}function L({time:e,scoreSrc:t}){let r=d(e,18.92,19.2),i=_(e),a=i.id===`complete`,o={prepare:p.runEnd,implement:p.executionPrepareEnd,validate:p.executionImplementEnd,update:p.executionValidateEnd,complete:p.executionComplete}[i.id],s=d(e,o,o+.32),c=k(e);return(0,E.jsx)(`div`,{className:`scene-execution`,style:{"--reveal":r,"--stage-reveal":s},children:(0,E.jsxs)(`article`,{className:`homepage-motion-panel homepage-motion-execution-panel homepage-motion-execution-card is-score-${a?`complete`:`running`}`,children:[(0,E.jsx)(`header`,{className:`homepage-motion-panel-header`,children:(0,E.jsxs)(`div`,{className:`homepage-motion-panel-title`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,"aria-hidden":`true`,children:(0,E.jsx)(y,{})}),(0,E.jsx)(`h3`,{children:`Tutti is working on`})]})}),(0,E.jsxs)(`div`,{className:`homepage-motion-execution-body`,children:[(0,E.jsxs)(`div`,{className:`homepage-motion-execution-step homepage-motion-execution-stage is-${a?`complete`:`running`} has-marker`,children:[(0,E.jsx)(`span`,{className:`homepage-motion-execution-marker ${a?`is-done`:`is-running`}`,"aria-hidden":`true`,children:a?(0,E.jsx)(S,{}):(0,E.jsx)(n,{})}),(0,E.jsx)(`span`,{className:`homepage-motion-execution-step-content homepage-motion-execution-stage-copy`,children:(0,E.jsxs)(`span`,{className:`homepage-motion-execution-step-title`,children:[(0,E.jsx)(`span`,{className:`homepage-motion-execution-step-label`,children:i.label}),a?null:(0,E.jsx)(`span`,{className:`homepage-motion-execution-step-elapsed`,children:` (${I(e,o)})`})]})},i.id)]}),(0,E.jsx)(`div`,{className:`homepage-motion-running-score ${a?`is-complete`:``}`,role:`img`,"aria-label":`Ode to Joy score phrase`,children:(0,E.jsx)(`div`,{className:`homepage-motion-score-passage`,style:{"--score-translate-x":`${-395.3*c}px`},"aria-hidden":`true`,children:(0,E.jsx)(`img`,{src:t,alt:``,draggable:!1})})})]})]})})}function R({color:e,variant:t=`vase`,className:n=``}){let r={"--ceramic-color":e};return t===`cup`?(0,E.jsxs)(`svg`,{className:`ceramic-object is-cup ${n}`,viewBox:`0 0 260 260`,style:r,"aria-hidden":`true`,children:[(0,E.jsx)(`path`,{className:`ceramic-main`,d:`M54 64h132l-9 126c-2 26-20 42-46 42h-22c-26 0-44-16-46-42Z`}),(0,E.jsx)(`path`,{className:`ceramic-outline`,d:`M186 92h18c34 0 34 72 1 76h-27`}),(0,E.jsx)(`ellipse`,{className:`ceramic-rim`,cx:`120`,cy:`64`,rx:`66`,ry:`13`}),(0,E.jsx)(`path`,{className:`ceramic-highlight`,d:`M78 90c5 62 4 91 20 114`})]}):t===`bowl`?(0,E.jsxs)(`svg`,{className:`ceramic-object is-bowl ${n}`,viewBox:`0 0 300 220`,style:r,"aria-hidden":`true`,children:[(0,E.jsx)(`ellipse`,{className:`ceramic-rim`,cx:`150`,cy:`55`,rx:`116`,ry:`24`}),(0,E.jsx)(`path`,{className:`ceramic-main`,d:`M34 55c8 82 45 132 116 132S258 137 266 55c-42 25-190 25-232 0Z`}),(0,E.jsx)(`path`,{className:`ceramic-highlight`,d:`M72 82c18 45 40 70 70 82`}),(0,E.jsx)(`path`,{className:`ceramic-base`,d:`M112 185h76`})]}):(0,E.jsxs)(`svg`,{className:`ceramic-object is-vase ${n}`,viewBox:`0 0 320 420`,style:r,"aria-hidden":`true`,children:[(0,E.jsx)(`path`,{className:`ceramic-main`,d:`M116 56c7 38-17 61-36 96-31 56-28 157 5 199 33 42 117 42 150 0 33-42 36-143 5-199-19-35-43-58-36-96Z`}),(0,E.jsx)(`ellipse`,{className:`ceramic-rim`,cx:`160`,cy:`56`,rx:`44`,ry:`12`}),(0,E.jsx)(`ellipse`,{className:`ceramic-base`,cx:`160`,cy:`365`,rx:`66`,ry:`13`}),(0,E.jsx)(`path`,{className:`ceramic-highlight`,d:`M108 153c-25 64-23 145 1 185`})]})}function z({time:e}){let t=d(e,p.artifactClick,33.25),n=d(e,34.25,34.52),r=d(e,34.88,35.15),i=d(e,35.55,35.82),a=g(e),o=O(`#d9cbb4`,`#c56f4f`,n);e>=34.88&&(o=O(`#c56f4f`,`#6f9275`,r)),e>=35.55&&(o=O(`#6f9275`,`#243a46`,i));let s=e>=35.55?`ink`:e>=34.88?`sage`:e>=34.25?`clay`:null,c={"--artifact-scroll":a};return(0,E.jsxs)(`section`,{className:`scene-panel scene-artifact-panel`,style:D(t),children:[(0,E.jsxs)(`header`,{className:`scene-panel-header`,children:[(0,E.jsx)(`span`,{className:`scene-icon-tile`,children:(0,E.jsx)(l,{"aria-hidden":`true`})}),(0,E.jsx)(`h2`,{children:`Artifacts`}),(0,E.jsx)(`span`,{className:`scene-ready-tag`,children:`Ready`})]}),(0,E.jsx)(`div`,{className:`scene-artifact-canvas`,children:(0,E.jsxs)(`div`,{className:`artifact-page-frame`,style:c,children:[(0,E.jsxs)(`div`,{className:`artifact-page-nav`,children:[(0,E.jsx)(`strong`,{children:`Morrow`}),(0,E.jsx)(`span`,{children:`Objects · Journal · Studio`})]}),(0,E.jsxs)(`section`,{className:`artifact-hero`,children:[(0,E.jsxs)(`div`,{className:`artifact-hero-copy`,children:[(0,E.jsx)(`span`,{className:`artifact-eyebrow`,children:`Hand-finished in small batches`}),(0,E.jsx)(`h3`,{children:`Objects for slower days.`}),(0,E.jsx)(`p`,{children:`Quiet forms, warm glazes, and useful pieces made to live with.`}),(0,E.jsx)(`button`,{type:`button`,tabIndex:-1,children:`Explore the collection`})]}),(0,E.jsxs)(`div`,{className:`artifact-hero-object`,children:[(0,E.jsx)(R,{color:o}),(0,E.jsxs)(`div`,{className:`artifact-glaze-picker`,"aria-label":`Glaze preview`,children:[(0,E.jsx)(`span`,{children:`Glaze`}),(0,E.jsx)(`i`,{className:s===`clay`?`is-active is-clay`:`is-clay`}),(0,E.jsx)(`i`,{className:s===`sage`?`is-active is-sage`:`is-sage`}),(0,E.jsx)(`i`,{className:s===`ink`?`is-active is-ink`:`is-ink`})]})]})]}),(0,E.jsxs)(`section`,{className:`artifact-collection`,children:[(0,E.jsxs)(`header`,{children:[(0,E.jsx)(`span`,{children:`Selected pieces`}),(0,E.jsx)(`p`,{children:`Everyday forms shaped for the rituals around them.`})]}),(0,E.jsxs)(`div`,{className:`artifact-product-grid`,children:[(0,E.jsxs)(`article`,{children:[(0,E.jsx)(R,{color:`#b9785f`,variant:`cup`}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`strong`,{children:`Low cup`}),(0,E.jsx)(`span`,{children:`Rust glaze`})]})]}),(0,E.jsxs)(`article`,{children:[(0,E.jsx)(R,{color:`#819283`,variant:`vase`}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`strong`,{children:`Field vase`}),(0,E.jsx)(`span`,{children:`Sage glaze`})]})]}),(0,E.jsxs)(`article`,{children:[(0,E.jsx)(R,{color:`#d5c7af`,variant:`bowl`}),(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`strong`,{children:`Gather bowl`}),(0,E.jsx)(`span`,{children:`Flax glaze`})]})]})]})]}),(0,E.jsxs)(`section`,{className:`artifact-studio`,children:[(0,E.jsx)(`span`,{children:`Made by hand · Meant for every day`}),(0,E.jsx)(`h3`,{children:`Useful things can still feel special.`}),(0,E.jsx)(`p`,{children:`We make a small number of considered objects, slowly and close to home.`}),(0,E.jsx)(`button`,{type:`button`,tabIndex:-1,children:`Visit the studio`})]}),(0,E.jsxs)(`footer`,{className:`artifact-page-footer`,children:[(0,E.jsx)(`strong`,{children:`Morrow Ceramics`}),(0,E.jsx)(`span`,{className:`artifact-built-with`,children:`Built with Tutti.`}),(0,E.jsx)(`span`,{children:`Small batch · Est. 2026`})]})]})})]})}function B(e,t,n){return e+(t-e)*n}function V(e,t,n,r,i){let a=d(e,t,n,m);return{x:B(r.x,i.x,a),y:B(r.y,i.y,a)}}function H(e,t,n){return e<t||e>n?0:Math.sin(Math.PI*((e-t)/(n-t)))}function U(e){if(e>=p.runCursorStart&&e<18.92){let t=V(e,p.runCursorStart,p.runCursorArrive,{x:86,y:76},{x:94.25,y:94.2});return{visible:!0,x:t.x,y:t.y,clickPulse:H(e,p.runClickStart,p.runEnd)}}if(e>=31&&e<33.45){let t=V(e,31,32.22,{x:50,y:58},{x:4,y:22.85});return{visible:!0,x:t.x,y:t.y,clickPulse:H(e,32.28,32.6)}}return{visible:!1,x:50,y:50,clickPulse:0}}function W({time:e,assets:t}){let n=u(e),r=U(e),i=a(e),o=d(e,.08,1.05,m);return(0,E.jsx)(`div`,{className:`motion-scene`,role:`img`,"aria-label":`Tutti workflow animation from team discussion to a generated ceramics storefront`,style:{opacity:i,visibility:i<=.001?`hidden`:`visible`},children:(0,E.jsxs)(`div`,{className:`motion-stage`,style:{opacity:o,transform:`translate(50%, 50%) scale(${n.scale}) translate(${-n.centerX*100}%, ${-n.centerY*100}%)`},children:[(0,E.jsx)(M,{time:e,assets:t}),(0,E.jsxs)(`div`,{className:`scene-workspace-layer`,children:[(0,E.jsx)(N,{time:e,assets:t}),(0,E.jsx)(F,{time:e}),(0,E.jsx)(L,{time:e,scoreSrc:t.scoreSrc})]}),(0,E.jsx)(z,{time:e}),(0,E.jsxs)(`span`,{className:`scene-cursor ${r.visible?`is-visible`:``}`,style:{left:`${r.x}%`,top:`${r.y}%`,"--click-pulse":r.clickPulse},"aria-hidden":`true`,children:[(0,E.jsx)(w,{}),(0,E.jsx)(`i`,{})]})]})})}export{W as HomepageMotionScene};