@xfey/tutti 0.1.127 → 0.1.129

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 (85) hide show
  1. package/dist/approvals/decision-command.d.ts +2 -2
  2. package/dist/chat-assistant/diagnostics.d.ts +17 -3
  3. package/dist/chat-assistant/diagnostics.js +5 -2
  4. package/dist/chat-assistant/failure-messages.d.ts +4 -0
  5. package/dist/chat-assistant/failure-messages.js +57 -0
  6. package/dist/chat-assistant/failures.d.ts +27 -0
  7. package/dist/chat-assistant/failures.js +46 -0
  8. package/dist/chat-assistant/index.d.ts +18 -4
  9. package/dist/chat-assistant/index.js +254 -51
  10. package/dist/chat-assistant/language-context.d.ts +2 -0
  11. package/dist/chat-assistant/language-context.js +17 -14
  12. package/dist/chat-assistant/requests.d.ts +34 -0
  13. package/dist/chat-assistant/requests.js +64 -0
  14. package/dist/collaboration-ingestion/clarification.js +3 -1
  15. package/dist/collaboration-ingestion/main-chat.js +1 -0
  16. package/dist/collaboration-ingestion/types.d.ts +2 -0
  17. package/dist/collaboration-state/clarification-snapshot.d.ts +5 -5
  18. package/dist/collaboration-state/context-sync-attempts.d.ts +9 -0
  19. package/dist/collaboration-state/context-sync-attempts.js +13 -0
  20. package/dist/collaboration-state/task-compile-context.d.ts +1 -1
  21. package/dist/collaboration-state/task-compile-context.js +11 -1
  22. package/dist/collaboration-state/task-compile-requests.d.ts +6 -0
  23. package/dist/collaboration-state/task-compile-requests.js +16 -0
  24. package/dist/communication-language/notice-locale.d.ts +4 -0
  25. package/dist/communication-language/notice-locale.js +14 -0
  26. package/dist/control-plane/context-sync-completion.d.ts +7 -0
  27. package/dist/control-plane/context-sync-completion.js +27 -0
  28. package/dist/control-plane/context-sync.d.ts +1 -0
  29. package/dist/control-plane/context-sync.js +23 -0
  30. package/dist/control-plane/index.d.ts +13 -4
  31. package/dist/control-plane/index.js +30 -23
  32. package/dist/control-plane/task-compile-continuation.js +2 -0
  33. package/dist/control-plane/task-compile-request-status.d.ts +6 -0
  34. package/dist/control-plane/task-compile-request-status.js +70 -0
  35. package/dist/control-plane/task-compile-start.js +40 -2
  36. package/dist/control-plane/types.d.ts +2 -0
  37. package/dist/providers/failure-classification.d.ts +23 -0
  38. package/dist/providers/failure-classification.js +43 -0
  39. package/dist/providers/invocation-progress.d.ts +6 -0
  40. package/dist/providers/invocation-progress.js +24 -0
  41. package/dist/providers/openai/app-server/read-only-procedure.js +1 -0
  42. package/dist/providers/openai/chat-assistant.js +2 -1
  43. package/dist/reference-access/read-evidence.d.ts +2 -0
  44. package/dist/reference-access/read-evidence.js +5 -0
  45. package/dist/reference-access/service.d.ts +2 -0
  46. package/dist/reference-access/service.js +2 -0
  47. package/dist/runtime-failures.js +15 -1
  48. package/dist/server-shell/cli/external-reference-runtime.js +6 -3
  49. package/dist/server-shell/cli/host-server-runtime.js +8 -2
  50. package/dist/server-shell/cli/relay-registration.js +1 -0
  51. package/dist/server-shell/http/routes/project-api/messages-routes.js +22 -1
  52. package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.d.ts +140 -5
  53. package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.js +29 -2
  54. package/dist/server-shell/http/routes/project-api/openapi-skills-routes.d.ts +2 -0
  55. package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +6 -0
  56. package/dist/server-shell/http/routes/project-api/openapi.d.ts +148 -5
  57. package/dist/server-shell/http/routes/project-api/schemas.d.ts +6 -0
  58. package/dist/server-shell/http/routes/project-api/schemas.js +1 -0
  59. package/dist/server-shell/http/routes/project-api/types.d.ts +1 -0
  60. package/dist/server-shell/http/routes/project-api/workflow-routes.js +39 -3
  61. package/dist/server-shell/http/routes/project-api/workspace-projections.js +1 -0
  62. package/dist/server-shell/http/validation.js +8 -2
  63. package/dist/server-shell/local-console/managed-project-service.d.ts +1 -1
  64. package/dist/server-shell/managed-access/transport.d.ts +1 -1
  65. package/migrations/0024_chat_requests.sql +19 -0
  66. package/migrations/0025_task_compile_requests.sql +50 -0
  67. package/migrations/0026_context_sync_and_chat_locale.sql +12 -0
  68. package/migrations/README.md +3 -1
  69. package/node_modules/@tutti/relay-client/dist/host-control.d.ts +1 -0
  70. package/node_modules/@tutti/relay-client/dist/host-control.js +1 -0
  71. package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +1 -0
  72. package/node_modules/@tutti/shared/dist/schemas/api/index.js +1 -0
  73. package/node_modules/@tutti/shared/dist/schemas/api/operation-status.d.ts +174 -0
  74. package/node_modules/@tutti/shared/dist/schemas/api/operation-status.js +75 -0
  75. package/node_modules/@tutti/shared/dist/schemas/api/primitives.d.ts +1 -0
  76. package/node_modules/@tutti/shared/dist/schemas/api/primitives.js +1 -0
  77. package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.d.ts +1 -0
  78. package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.js +2 -1
  79. package/package.json +1 -1
  80. package/web/assets/{homepage-motion-scene-DyEmWwvt.js → homepage-motion-scene-BHhw4CfM.js} +1 -1
  81. package/web/assets/index-5COc1Yku.js +70 -0
  82. package/web/assets/index-BJvKuUiT.css +1 -0
  83. package/web/index.html +2 -2
  84. package/web/assets/index-By3idT4U.js +0 -70
  85. package/web/assets/index-DSBjOZmJ.css +0 -1
@@ -0,0 +1,174 @@
1
+ import { type Static } from "@sinclair/typebox";
2
+ export declare const OperationFailureSchema: import("@sinclair/typebox").TObject<{
3
+ code: import("@sinclair/typebox").TString;
4
+ category: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"capacity" | "access" | "configuration" | "dependency" | "interrupted" | "internal">[]>;
5
+ recovery: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"resend_request" | "check_provider" | "restart_host" | "contact_support" | "none">[]>;
6
+ diagnostic_id: import("@sinclair/typebox").TString;
7
+ }>;
8
+ export declare const ChatRequestStatusSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
9
+ status: import("@sinclair/typebox").TLiteral<"queued">;
10
+ phase: import("@sinclair/typebox").TLiteral<"queue">;
11
+ operation: import("@sinclair/typebox").TObject<{
12
+ kind: import("@sinclair/typebox").TLiteral<"chat_answer">;
13
+ ref: import("@sinclair/typebox").TString;
14
+ }>;
15
+ revision: import("@sinclair/typebox").TInteger;
16
+ created_at: import("@sinclair/typebox").TString;
17
+ updated_at: import("@sinclair/typebox").TString;
18
+ }>, import("@sinclair/typebox").TObject<{
19
+ status: import("@sinclair/typebox").TLiteral<"running">;
20
+ phase: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"workspace_wait">, import("@sinclair/typebox").TLiteral<"answer">]>;
21
+ operation: import("@sinclair/typebox").TObject<{
22
+ kind: import("@sinclair/typebox").TLiteral<"chat_answer">;
23
+ ref: import("@sinclair/typebox").TString;
24
+ }>;
25
+ revision: import("@sinclair/typebox").TInteger;
26
+ created_at: import("@sinclair/typebox").TString;
27
+ updated_at: import("@sinclair/typebox").TString;
28
+ }>, import("@sinclair/typebox").TObject<{
29
+ status: import("@sinclair/typebox").TLiteral<"succeeded">;
30
+ phase: import("@sinclair/typebox").TLiteral<"settled">;
31
+ response_message_id: import("@sinclair/typebox").TString;
32
+ operation: import("@sinclair/typebox").TObject<{
33
+ kind: import("@sinclair/typebox").TLiteral<"chat_answer">;
34
+ ref: import("@sinclair/typebox").TString;
35
+ }>;
36
+ revision: import("@sinclair/typebox").TInteger;
37
+ created_at: import("@sinclair/typebox").TString;
38
+ updated_at: import("@sinclair/typebox").TString;
39
+ }>, import("@sinclair/typebox").TObject<{
40
+ status: import("@sinclair/typebox").TLiteral<"failed">;
41
+ phase: import("@sinclair/typebox").TLiteral<"settled">;
42
+ failure: import("@sinclair/typebox").TObject<{
43
+ code: import("@sinclair/typebox").TString;
44
+ category: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"capacity" | "access" | "configuration" | "dependency" | "interrupted" | "internal">[]>;
45
+ recovery: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"resend_request" | "check_provider" | "restart_host" | "contact_support" | "none">[]>;
46
+ diagnostic_id: import("@sinclair/typebox").TString;
47
+ }>;
48
+ response_message_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
49
+ operation: import("@sinclair/typebox").TObject<{
50
+ kind: import("@sinclair/typebox").TLiteral<"chat_answer">;
51
+ ref: import("@sinclair/typebox").TString;
52
+ }>;
53
+ revision: import("@sinclair/typebox").TInteger;
54
+ created_at: import("@sinclair/typebox").TString;
55
+ updated_at: import("@sinclair/typebox").TString;
56
+ }>]>;
57
+ export type OperationFailure = Static<typeof OperationFailureSchema>;
58
+ export type ChatRequestStatus = Static<typeof ChatRequestStatusSchema>;
59
+ export declare const WorklistSubmissionStatusSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
60
+ status: import("@sinclair/typebox").TLiteral<"running">;
61
+ phase: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"preparing">, import("@sinclair/typebox").TLiteral<"scratchpad_refresh">, import("@sinclair/typebox").TLiteral<"reference_summary_refresh">, import("@sinclair/typebox").TLiteral<"project_context_bootstrap">, import("@sinclair/typebox").TLiteral<"task_compile">]>;
62
+ operation: import("@sinclair/typebox").TObject<{
63
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
64
+ ref: import("@sinclair/typebox").TString;
65
+ }>;
66
+ created_at: import("@sinclair/typebox").TString;
67
+ activity_ref: import("@sinclair/typebox").TString;
68
+ }>, import("@sinclair/typebox").TObject<{
69
+ status: import("@sinclair/typebox").TLiteral<"waiting_input">;
70
+ phase: import("@sinclair/typebox").TLiteral<"clarification">;
71
+ round_id: import("@sinclair/typebox").TString;
72
+ operation: import("@sinclair/typebox").TObject<{
73
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
74
+ ref: import("@sinclair/typebox").TString;
75
+ }>;
76
+ created_at: import("@sinclair/typebox").TString;
77
+ activity_ref: import("@sinclair/typebox").TString;
78
+ }>, import("@sinclair/typebox").TObject<{
79
+ status: import("@sinclair/typebox").TLiteral<"succeeded">;
80
+ phase: import("@sinclair/typebox").TLiteral<"settled">;
81
+ operation: import("@sinclair/typebox").TObject<{
82
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
83
+ ref: import("@sinclair/typebox").TString;
84
+ }>;
85
+ created_at: import("@sinclair/typebox").TString;
86
+ activity_ref: import("@sinclair/typebox").TString;
87
+ }>, import("@sinclair/typebox").TObject<{
88
+ status: import("@sinclair/typebox").TLiteral<"failed">;
89
+ phase: import("@sinclair/typebox").TLiteral<"settled">;
90
+ failure: import("@sinclair/typebox").TObject<{
91
+ code: import("@sinclair/typebox").TString;
92
+ category: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"capacity" | "access" | "configuration" | "dependency" | "interrupted" | "internal">[]>;
93
+ recovery: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"resend_request" | "check_provider" | "restart_host" | "contact_support" | "none">[]>;
94
+ diagnostic_id: import("@sinclair/typebox").TString;
95
+ }>;
96
+ operation: import("@sinclair/typebox").TObject<{
97
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
98
+ ref: import("@sinclair/typebox").TString;
99
+ }>;
100
+ created_at: import("@sinclair/typebox").TString;
101
+ activity_ref: import("@sinclair/typebox").TString;
102
+ }>, import("@sinclair/typebox").TObject<{
103
+ status: import("@sinclair/typebox").TLiteral<"unknown">;
104
+ phase: import("@sinclair/typebox").TLiteral<"unconfirmed">;
105
+ operation: import("@sinclair/typebox").TObject<{
106
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
107
+ ref: import("@sinclair/typebox").TString;
108
+ }>;
109
+ created_at: import("@sinclair/typebox").TString;
110
+ activity_ref: import("@sinclair/typebox").TString;
111
+ }>]>;
112
+ export declare const CurrentWorklistSubmissionSchema: import("@sinclair/typebox").TObject<{
113
+ request: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
114
+ status: import("@sinclair/typebox").TLiteral<"running">;
115
+ phase: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"preparing">, import("@sinclair/typebox").TLiteral<"scratchpad_refresh">, import("@sinclair/typebox").TLiteral<"reference_summary_refresh">, import("@sinclair/typebox").TLiteral<"project_context_bootstrap">, import("@sinclair/typebox").TLiteral<"task_compile">]>;
116
+ operation: import("@sinclair/typebox").TObject<{
117
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
118
+ ref: import("@sinclair/typebox").TString;
119
+ }>;
120
+ created_at: import("@sinclair/typebox").TString;
121
+ activity_ref: import("@sinclair/typebox").TString;
122
+ }>, import("@sinclair/typebox").TObject<{
123
+ status: import("@sinclair/typebox").TLiteral<"waiting_input">;
124
+ phase: import("@sinclair/typebox").TLiteral<"clarification">;
125
+ round_id: import("@sinclair/typebox").TString;
126
+ operation: import("@sinclair/typebox").TObject<{
127
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
128
+ ref: import("@sinclair/typebox").TString;
129
+ }>;
130
+ created_at: import("@sinclair/typebox").TString;
131
+ activity_ref: import("@sinclair/typebox").TString;
132
+ }>, import("@sinclair/typebox").TObject<{
133
+ status: import("@sinclair/typebox").TLiteral<"succeeded">;
134
+ phase: import("@sinclair/typebox").TLiteral<"settled">;
135
+ operation: import("@sinclair/typebox").TObject<{
136
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
137
+ ref: import("@sinclair/typebox").TString;
138
+ }>;
139
+ created_at: import("@sinclair/typebox").TString;
140
+ activity_ref: import("@sinclair/typebox").TString;
141
+ }>, import("@sinclair/typebox").TObject<{
142
+ status: import("@sinclair/typebox").TLiteral<"failed">;
143
+ phase: import("@sinclair/typebox").TLiteral<"settled">;
144
+ failure: import("@sinclair/typebox").TObject<{
145
+ code: import("@sinclair/typebox").TString;
146
+ category: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"capacity" | "access" | "configuration" | "dependency" | "interrupted" | "internal">[]>;
147
+ recovery: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<"resend_request" | "check_provider" | "restart_host" | "contact_support" | "none">[]>;
148
+ diagnostic_id: import("@sinclair/typebox").TString;
149
+ }>;
150
+ operation: import("@sinclair/typebox").TObject<{
151
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
152
+ ref: import("@sinclair/typebox").TString;
153
+ }>;
154
+ created_at: import("@sinclair/typebox").TString;
155
+ activity_ref: import("@sinclair/typebox").TString;
156
+ }>, import("@sinclair/typebox").TObject<{
157
+ status: import("@sinclair/typebox").TLiteral<"unknown">;
158
+ phase: import("@sinclair/typebox").TLiteral<"unconfirmed">;
159
+ operation: import("@sinclair/typebox").TObject<{
160
+ kind: import("@sinclair/typebox").TLiteral<"worklist_submit">;
161
+ ref: import("@sinclair/typebox").TString;
162
+ }>;
163
+ created_at: import("@sinclair/typebox").TString;
164
+ activity_ref: import("@sinclair/typebox").TString;
165
+ }>]>, import("@sinclair/typebox").TNull]>;
166
+ }>;
167
+ export type WorklistSubmissionStatus = Static<typeof WorklistSubmissionStatusSchema>;
168
+ export type CurrentWorklistSubmission = Static<typeof CurrentWorklistSubmissionSchema>;
169
+ export declare const WorklistSubmissionQuerySchema: import("@sinclair/typebox").TObject<{
170
+ workflow_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
171
+ command_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
172
+ }>;
173
+ export type WorklistSubmissionQuery = Static<typeof WorklistSubmissionQuerySchema>;
174
+ //# sourceMappingURL=operation-status.d.ts.map
@@ -0,0 +1,75 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { ActivityRefSchema, ClarificationRoundRefSchema, IdempotencyKeySchema, IsoDateTimeStringSchema, MessageIdSchema, WorkflowInvocationRefSchema, } from "../domain/index.js";
3
+ // Shared vocabulary, not a second Task/Run state machine. Add operation kinds only
4
+ // when an authoritative adapter and its query contract actually exist.
5
+ export const OperationFailureSchema = Type.Object({
6
+ code: Type.String({ pattern: "^[a-z][a-z0-9_]{0,63}$" }),
7
+ category: Type.Union(["capacity", "access", "configuration", "dependency", "interrupted", "internal"].map((value) => Type.Literal(value))),
8
+ recovery: Type.Union(["resend_request", "check_provider", "restart_host", "contact_support", "none"].map((value) => Type.Literal(value))),
9
+ diagnostic_id: Type.String({ pattern: "^[A-Za-z0-9_-]{1,128}$" }),
10
+ }, { additionalProperties: false });
11
+ const common = {
12
+ operation: Type.Object({ kind: Type.Literal("chat_answer"), ref: MessageIdSchema }, { additionalProperties: false }),
13
+ revision: Type.Integer({ minimum: 1 }),
14
+ created_at: IsoDateTimeStringSchema,
15
+ updated_at: IsoDateTimeStringSchema,
16
+ };
17
+ export const ChatRequestStatusSchema = Type.Union([
18
+ Type.Object({ ...common, status: Type.Literal("queued"), phase: Type.Literal("queue") }, { additionalProperties: false }),
19
+ Type.Object({
20
+ ...common,
21
+ status: Type.Literal("running"),
22
+ phase: Type.Union([Type.Literal("workspace_wait"), Type.Literal("answer")]),
23
+ }, { additionalProperties: false }),
24
+ Type.Object({
25
+ ...common,
26
+ status: Type.Literal("succeeded"),
27
+ phase: Type.Literal("settled"),
28
+ response_message_id: MessageIdSchema,
29
+ }, { additionalProperties: false }),
30
+ Type.Object({
31
+ ...common,
32
+ status: Type.Literal("failed"),
33
+ phase: Type.Literal("settled"),
34
+ failure: OperationFailureSchema,
35
+ response_message_id: Type.Optional(MessageIdSchema),
36
+ }, { additionalProperties: false }),
37
+ ]);
38
+ const submission = {
39
+ operation: Type.Object({ kind: Type.Literal("worklist_submit"), ref: WorkflowInvocationRefSchema }, { additionalProperties: false }),
40
+ created_at: IsoDateTimeStringSchema,
41
+ activity_ref: ActivityRefSchema,
42
+ };
43
+ export const WorklistSubmissionStatusSchema = Type.Union([
44
+ Type.Object({
45
+ ...submission,
46
+ status: Type.Literal("running"),
47
+ phase: Type.Union([
48
+ Type.Literal("preparing"),
49
+ Type.Literal("scratchpad_refresh"),
50
+ Type.Literal("reference_summary_refresh"),
51
+ Type.Literal("project_context_bootstrap"),
52
+ Type.Literal("task_compile"),
53
+ ]),
54
+ }, { additionalProperties: false }),
55
+ Type.Object({
56
+ ...submission,
57
+ status: Type.Literal("waiting_input"),
58
+ phase: Type.Literal("clarification"),
59
+ round_id: ClarificationRoundRefSchema,
60
+ }, { additionalProperties: false }),
61
+ Type.Object({ ...submission, status: Type.Literal("succeeded"), phase: Type.Literal("settled") }, { additionalProperties: false }),
62
+ Type.Object({
63
+ ...submission,
64
+ status: Type.Literal("failed"),
65
+ phase: Type.Literal("settled"),
66
+ failure: OperationFailureSchema,
67
+ }, { additionalProperties: false }),
68
+ Type.Object({ ...submission, status: Type.Literal("unknown"), phase: Type.Literal("unconfirmed") }, { additionalProperties: false }),
69
+ ]);
70
+ export const CurrentWorklistSubmissionSchema = Type.Object({ request: Type.Union([WorklistSubmissionStatusSchema, Type.Null()]) }, { additionalProperties: false });
71
+ export const WorklistSubmissionQuerySchema = Type.Object({
72
+ workflow_ref: Type.Optional(WorkflowInvocationRefSchema),
73
+ command_id: Type.Optional(IdempotencyKeySchema),
74
+ }, { additionalProperties: false, maxProperties: 1 });
75
+ //# sourceMappingURL=operation-status.js.map
@@ -79,6 +79,7 @@ export declare const ApiErrorResponseSchema: import("@sinclair/typebox").TObject
79
79
  message: import("@sinclair/typebox").TString;
80
80
  retryable: import("@sinclair/typebox").TBoolean;
81
81
  details: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnknown>;
82
+ request_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
82
83
  }>;
83
84
  }>;
84
85
  export declare const WorkspaceSseEventTypeSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"connection.ready">, import("@sinclair/typebox").TLiteral<"message.created">, import("@sinclair/typebox").TLiteral<"scratchpad.updated">, import("@sinclair/typebox").TLiteral<"worklist.changed">, import("@sinclair/typebox").TLiteral<"task.updated">, import("@sinclair/typebox").TLiteral<"task_detail.updated">, import("@sinclair/typebox").TLiteral<"clarification.changed">, import("@sinclair/typebox").TLiteral<"approval.changed">, import("@sinclair/typebox").TLiteral<"activity.event">, import("@sinclair/typebox").TLiteral<"execution_status.changed">, import("@sinclair/typebox").TLiteral<"provider_config.changed">, import("@sinclair/typebox").TLiteral<"workspace.recovered">, import("@sinclair/typebox").TLiteral<"query.invalidate">]>;
@@ -115,6 +115,7 @@ export const ApiErrorResponseSchema = Type.Object({
115
115
  message: Type.String({ minLength: 1 }),
116
116
  retryable: Type.Boolean(),
117
117
  details: Type.Optional(Type.Unknown()),
118
+ request_id: Type.Optional(Type.String({ pattern: "^[A-Za-z0-9_-]{1,128}$" })),
118
119
  }, { additionalProperties: false }),
119
120
  }, { additionalProperties: false });
120
121
  export const WorkspaceSseEventTypeSchema = Type.Union([
@@ -106,6 +106,7 @@ export declare const SubmitWorklistDispositionSchema: import("@sinclair/typebox"
106
106
  retry_with_new_command_id: import("@sinclair/typebox").TLiteral<true>;
107
107
  }>]>;
108
108
  export declare const SubmitWorklistResultSchema: import("@sinclair/typebox").TObject<{
109
+ submission_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
109
110
  activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
110
111
  workflow_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
111
112
  }>;
@@ -2,7 +2,7 @@ import { Type } from "@sinclair/typebox";
2
2
  import { ActivityRefSchema, ClarificationRoundRefSchema, ClarificationThreadRefSchema, IsoDateTimeStringSchema, TaskIdSchema, RunResultIdSchema, WorkflowInvocationRefSchema, } from "../domain/index.js";
3
3
  import { ProviderUnavailableReasonCodeSchema } from "./provider-config.js";
4
4
  import { InterruptedCommandDispositionSchema, NonEmptyStringSchema, commandEnvelopeSchema, commandResponseSchema, commandResponseWithResultSchema, } from "./primitives.js";
5
- import { ProjectDocSummaryProjectionSchema, ViewerPathSchema, } from "./viewer-reference.js";
5
+ import { ProjectDocSummaryProjectionSchema, ViewerPathSchema } from "./viewer-reference.js";
6
6
  import { ScratchpadProjectionSchema } from "./work-items.js";
7
7
  export const RefreshScratchpadDispositionSchema = Type.Union([
8
8
  Type.Object({ kind: Type.Literal("accepted") }, { additionalProperties: false }),
@@ -47,6 +47,7 @@ export const SubmitWorklistDispositionSchema = Type.Union([
47
47
  InterruptedCommandDispositionSchema,
48
48
  ]);
49
49
  export const SubmitWorklistResultSchema = Type.Object({
50
+ submission_ref: Type.Optional(WorkflowInvocationRefSchema),
50
51
  activity_ref: Type.Optional(ActivityRefSchema),
51
52
  workflow_ref: Type.Optional(WorkflowInvocationRefSchema),
52
53
  }, { additionalProperties: false });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xfey/tutti",
3
- "version": "0.1.127",
3
+ "version": "0.1.129",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -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-By3idT4U.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-5COc1Yku.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};