@xfey/tutti 0.1.97 → 0.1.99
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.
- package/README.md +2 -1
- package/dist/artifact-feedback/index.d.ts +19 -0
- package/dist/artifact-feedback/index.js +196 -0
- package/dist/chat-assistant/index.js +5 -4
- package/dist/collaboration-state/task-compile-context.d.ts +1 -1
- package/dist/control-plane/index.js +15 -3
- package/dist/control-plane/scratchpad-source-messages.js +2 -1
- package/dist/control-plane/task-source-context.js +3 -2
- package/dist/control-plane/worklist-terminal-feedback.js +4 -4
- package/dist/server-shell/http/routes/agent-context-references.js +8 -14
- package/dist/server-shell/http/routes/project-api/artifacts-routes.d.ts +2 -1
- package/dist/server-shell/http/routes/project-api/artifacts-routes.js +1 -0
- package/dist/server-shell/http/routes/project-api/messages-routes.d.ts +3 -1
- package/dist/server-shell/http/routes/project-api/messages-routes.js +61 -29
- package/dist/server-shell/http/routes/project-api/openapi-viewer-routes.d.ts +0 -2
- package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +8 -2
- package/dist/server-shell/http/routes/project-api/openapi.d.ts +8 -2
- package/dist/server-shell/http/routes/project-api/payload-validation.js +12 -0
- package/dist/server-shell/http/routes/project-api/reference-files.js +6 -17
- package/dist/server-shell/http/routes/project-api/schemas.d.ts +8 -2
- package/dist/server-shell/http/routes/project-api/schemas.js +2 -0
- package/dist/server-shell/http/routes/project-api/types.d.ts +1 -0
- package/dist/server-shell/http/routes/project-api/workspace-projections.js +1 -0
- package/dist/server-shell/http/routes/project-api.js +2 -2
- package/dist/workspace-ops/constants.d.ts +0 -1
- package/dist/workspace-ops/constants.js +0 -1
- package/dist/workspace-ops/index.d.ts +3 -2
- package/dist/workspace-ops/index.js +3 -2
- package/dist/workspace-ops/project-doc-templates.js +1 -1
- package/dist/workspace-ops/reference-files.js +3 -2
- package/dist/workspace-ops/reference-metadata.d.ts +2 -2
- package/dist/workspace-ops/reference-metadata.js +8 -22
- package/dist/workspace-ops/reference-summaries.js +11 -17
- package/dist/workspace-ops/reference-tree.d.ts +11 -0
- package/dist/workspace-ops/reference-tree.js +34 -0
- package/dist/workspace-ops/viewer-git.d.ts +1 -0
- package/dist/workspace-ops/viewer-git.js +11 -0
- package/node_modules/@tutti/shared/dist/schemas/api/artifact-feedback.d.ts +374 -0
- package/node_modules/@tutti/shared/dist/schemas/api/artifact-feedback.js +83 -0
- package/node_modules/@tutti/shared/dist/schemas/api/clarifications.d.ts +86 -0
- package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +2 -1
- package/node_modules/@tutti/shared/dist/schemas/api/index.js +2 -1
- package/node_modules/@tutti/shared/dist/schemas/api/messages.d.ts +441 -2
- package/node_modules/@tutti/shared/dist/schemas/api/messages.js +17 -3
- package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +13 -1
- package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.d.ts +86 -5
- package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.js +0 -2
- package/package.json +1 -1
- package/prompts/procedures/context-sync.md +3 -3
- package/prompts/procedures/reference-file-summary.md +1 -1
- package/prompts/procedures/task-compile.md +2 -2
- package/prompts/prompt-flow-map.md +1 -1
- package/prompts/runs/task-execute.md +2 -2
- package/prompts/skills/read-references/SKILL.md +2 -2
- package/web/assets/homepage-motion-scene-BtMS4SCZ.js +1 -0
- package/web/assets/index-DtZ_5QLQ.js +69 -0
- package/web/assets/index-JY06YzFV.css +1 -0
- package/web/index.html +2 -2
- package/web/assets/homepage-motion-scene-lpr-1FjJ.js +0 -1
- package/web/assets/index-CQoq2PtU.js +0 -69
- package/web/assets/index-quWLFJgD.css +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Static } from "@sinclair/typebox";
|
|
2
|
+
import type { ArtifactElementAnchorSchema, ArtifactElementKindSchema, ArtifactElementTargetSchema, ArtifactFeedbackAnnotationSchema, ArtifactFeedbackCommandSchema, ArtifactFeedbackRefSchema, ArtifactSemanticContextSchema, ArtifactSemanticSnapshotSchema, ArtifactSemanticStateSchema } from "./artifact-feedback.js";
|
|
2
3
|
import type { IdempotencyKeySchema, IsoDateTimeStringSchema } from "../domain/index.js";
|
|
3
4
|
import type { ApiErrorCodeSchema, ApiErrorResponseSchema, CommandDispositionBaseSchema, CursorPageRequestSchema, InterruptedCommandDispositionSchema, QueryInvalidationHintSchema, RelayInvalidationHintSchema, RelaySseEventTypeSchema, SseReplayWindowPolicySchema, WorkspaceSseEventTypeSchema } from "./primitives.js";
|
|
4
5
|
import type { GetProviderModelsResponseSchema, ProviderConfigInvalidReasonCodeSchema, ProviderConfigProjectionSchema, ProviderModelDiscoveryUnavailableReasonSchema, ProviderModelNameSchema, ProviderModelValidationFailureReasonSchema, ProviderUnavailableReasonCodeSchema, ProjectProviderUnavailableReasonSchema, UpdateProviderDefaultModelDispositionSchema, UpdateProviderDefaultModelPayloadSchema } from "./provider-config.js";
|
|
@@ -6,7 +7,7 @@ import type { ProviderUsageBreakdownProjectionSchema, ProviderUsageCategorySchem
|
|
|
6
7
|
import type { ProjectTimelineItemKindSchema, ProjectTimelineItemSchema, ProjectTimelineItemStatusSchema, ProjectTimelineResponseSchema, ProjectTimelineTaskUpdateStateSchema, ProjectTimelineClarificationTraceSchema, ProjectTimelineTraceCardSchema, ProjectTimelineTraceLinkSchema } from "./project-timeline.js";
|
|
7
8
|
import type { PresignedUploadPutSchema, RelayUploadProjectionSchema, RelayUploadPurposeSchema, Sha256DigestSchema, StagedUploadReferenceSchema, StartRelayUploadDispositionSchema, StartRelayUploadPayloadSchema, StartRelayUploadResultSchema } from "./uploads.js";
|
|
8
9
|
import type { MarkReadDispositionSchema, MarkReadPayloadSchema, MarkReadResultSchema, ReadStateScopeProjectionSchema, ReadStateScopeSchema, ReadStateSummaryProjectionSchema } from "./read-state.js";
|
|
9
|
-
import type { GetMessagesRequestSchema, MessageCreatedEventPayloadSchema, MessageProjectionSchema, MessageReferenceFileRefSchema, ReferenceFileCategorySchema, SendMainChatMessageCreatedDispositionSchema, SendMainChatMessageDispositionSchema, SendMainChatMessagePayloadSchema, SendMainChatMessageResultSchema, ArtifactPreviewRefSchema, TaskResultRefSchema, WorklistCompileRefSchema, WorklistFeedbackGeneratedFileSchema, WorklistFeedbackItemSchema, WorklistFeedbackRefSchema } from "./messages.js";
|
|
10
|
+
import type { GetMessagesRequestSchema, MessageCreatedEventPayloadSchema, MessageProjectionSchema, MessageReferenceFileRefSchema, ReferenceFileCategorySchema, SendMainChatMessageCreatedDispositionSchema, SendMainChatMessageArtifactChangedDispositionSchema, SendMainChatMessageArtifactUnavailableDispositionSchema, SendMainChatMessageDispositionSchema, SendMainChatMessagePayloadSchema, SendMainChatMessageResultSchema, ArtifactPreviewRefSchema, TaskResultRefSchema, WorklistCompileRefSchema, WorklistFeedbackGeneratedFileSchema, WorklistFeedbackItemSchema, WorklistFeedbackRefSchema } from "./messages.js";
|
|
10
11
|
import type { CheckSkipReasonCodeSchema, ExternalSideEffectSummaryProjectionSchema, GetRecoverySummariesRequestSchema, GetRecoverySummaryResponseSchema, RecoverySummaryProjectionSchema, RunResultProjectionSchema, ScratchpadProjectionSchema, ScratchpadReceiptProjectionSchema, TaskContractProjectionSchema, TaskDetailProjectionSchema, TaskDetailResultProjectionSchema, TaskModuleProjectionSchema, TaskProjectionSchema, TaskStatusSchema, WorklistCompiledTaskSummarySchema, WorklistProjectionSchema } from "./work-items.js";
|
|
11
12
|
import type { ActiveApprovalProjectionSchema, ApprovalCommandProjectionSchema, ApprovalDecisionKindSchema, ApprovalDecisionOptionProjectionSchema, ApprovalFileChangeProjectionSchema, ApprovalPermissionsProjectionSchema, ApprovalRequestKindSchema, ApprovalRequestProjectionSchema, ApprovalResolutionOutcomeSchema, ApprovalResolutionProjectionSchema, DecideApprovalDispositionSchema, DecideApprovalPayloadSchema, DecideApprovalResultSchema } from "./approvals.js";
|
|
12
13
|
import type { ActiveClarificationProjectionSchema, ClarificationChangedEventPayloadSchema, ClarificationOwnerProjectionSchema, ClarificationRequestPayloadSchema, ClarificationRoundProjectionSchema, ClarificationRoundSummaryProjectionSchema, ClarificationSuccessorRefSchema, ClarificationThreadProjectionSchema, ContextRefSchema, GetClarificationRoundMessagesRequestSchema, GetClarificationRoundResponseSchema, GetClarificationThreadResponseSchema, HumanInteractionPayloadSchema, HumanRequestPayloadSchema, SendClarificationRoundMessageDispositionSchema, SendClarificationRoundMessagePayloadSchema, SendClarificationRoundMessageResultSchema, SubmitClarificationRoundDispositionSchema, SubmitClarificationRoundPayloadSchema, SubmitClarificationRoundResultSchema } from "./clarifications.js";
|
|
@@ -108,6 +109,15 @@ export type MarkReadDisposition = Static<typeof MarkReadDispositionSchema>;
|
|
|
108
109
|
export type MarkReadResult = Static<typeof MarkReadResultSchema>;
|
|
109
110
|
export type MarkReadResponse = CommandResponse<MarkReadDisposition, MarkReadResult>;
|
|
110
111
|
export type ReferenceFileCategory = Static<typeof ReferenceFileCategorySchema>;
|
|
112
|
+
export type ArtifactElementKind = Static<typeof ArtifactElementKindSchema>;
|
|
113
|
+
export type ArtifactSemanticContext = Static<typeof ArtifactSemanticContextSchema>;
|
|
114
|
+
export type ArtifactSemanticState = Static<typeof ArtifactSemanticStateSchema>;
|
|
115
|
+
export type ArtifactSemanticSnapshot = Static<typeof ArtifactSemanticSnapshotSchema>;
|
|
116
|
+
export type ArtifactElementAnchor = Static<typeof ArtifactElementAnchorSchema>;
|
|
117
|
+
export type ArtifactElementTarget = Static<typeof ArtifactElementTargetSchema>;
|
|
118
|
+
export type ArtifactFeedbackAnnotation = Static<typeof ArtifactFeedbackAnnotationSchema>;
|
|
119
|
+
export type ArtifactFeedbackCommand = Static<typeof ArtifactFeedbackCommandSchema>;
|
|
120
|
+
export type ArtifactFeedbackRef = Static<typeof ArtifactFeedbackRefSchema>;
|
|
111
121
|
export type MessageReferenceFileRef = Static<typeof MessageReferenceFileRefSchema>;
|
|
112
122
|
export type WorklistCompiledTaskSummary = Static<typeof WorklistCompiledTaskSummarySchema>;
|
|
113
123
|
export type WorklistCompileRef = Static<typeof WorklistCompileRefSchema>;
|
|
@@ -121,6 +131,8 @@ export type MessageWindow = TimelineWindow<MessageProjection>;
|
|
|
121
131
|
export type SendMainChatMessagePayload = Static<typeof SendMainChatMessagePayloadSchema>;
|
|
122
132
|
export type ApiInterruptedCommandDisposition = Static<typeof InterruptedCommandDispositionSchema>;
|
|
123
133
|
export type SendMainChatMessageCreatedDisposition = Static<typeof SendMainChatMessageCreatedDispositionSchema>;
|
|
134
|
+
export type SendMainChatMessageArtifactChangedDisposition = Static<typeof SendMainChatMessageArtifactChangedDispositionSchema>;
|
|
135
|
+
export type SendMainChatMessageArtifactUnavailableDisposition = Static<typeof SendMainChatMessageArtifactUnavailableDispositionSchema>;
|
|
124
136
|
export type SendMainChatMessageDisposition = Static<typeof SendMainChatMessageDispositionSchema>;
|
|
125
137
|
export type SendMainChatMessageResult = Static<typeof SendMainChatMessageResultSchema>;
|
|
126
138
|
export type GetMessagesRequest = Static<typeof GetMessagesRequestSchema>;
|
|
@@ -250,7 +250,6 @@ export declare const ReferenceDirectoryProjectionSchema: import("@sinclair/typeb
|
|
|
250
250
|
index_path: import("@sinclair/typebox").TLiteral<"docs/reference/README.md">;
|
|
251
251
|
files_path: import("@sinclair/typebox").TLiteral<"docs/reference/files">;
|
|
252
252
|
images_path: import("@sinclair/typebox").TLiteral<"docs/reference/images">;
|
|
253
|
-
tutti_path: import("@sinclair/typebox").TLiteral<"docs/reference/tutti">;
|
|
254
253
|
index_status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"available">, import("@sinclair/typebox").TLiteral<"missing">, import("@sinclair/typebox").TLiteral<"unreadable">]>;
|
|
255
254
|
index_unreadable_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"restricted_path">, import("@sinclair/typebox").TLiteral<"secret_like">, import("@sinclair/typebox").TLiteral<"binary">, import("@sinclair/typebox").TLiteral<"unsupported_encoding">, import("@sinclair/typebox").TLiteral<"too_large">]>>;
|
|
256
255
|
}>;
|
|
@@ -266,7 +265,6 @@ export declare const ReferenceSummaryProjectionSchema: import("@sinclair/typebox
|
|
|
266
265
|
export declare const ReferenceFileProjectionSchema: import("@sinclair/typebox").TObject<{
|
|
267
266
|
path: import("@sinclair/typebox").TString;
|
|
268
267
|
name: import("@sinclair/typebox").TString;
|
|
269
|
-
source: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"human_upload">, import("@sinclair/typebox").TLiteral<"tutti_output">]>;
|
|
270
268
|
category: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"file">, import("@sinclair/typebox").TLiteral<"image">]>;
|
|
271
269
|
size_bytes: import("@sinclair/typebox").TInteger;
|
|
272
270
|
media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
@@ -308,14 +306,12 @@ export declare const GetReferenceFilesResponseSchema: import("@sinclair/typebox"
|
|
|
308
306
|
index_path: import("@sinclair/typebox").TLiteral<"docs/reference/README.md">;
|
|
309
307
|
files_path: import("@sinclair/typebox").TLiteral<"docs/reference/files">;
|
|
310
308
|
images_path: import("@sinclair/typebox").TLiteral<"docs/reference/images">;
|
|
311
|
-
tutti_path: import("@sinclair/typebox").TLiteral<"docs/reference/tutti">;
|
|
312
309
|
index_status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"available">, import("@sinclair/typebox").TLiteral<"missing">, import("@sinclair/typebox").TLiteral<"unreadable">]>;
|
|
313
310
|
index_unreadable_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"restricted_path">, import("@sinclair/typebox").TLiteral<"secret_like">, import("@sinclair/typebox").TLiteral<"binary">, import("@sinclair/typebox").TLiteral<"unsupported_encoding">, import("@sinclair/typebox").TLiteral<"too_large">]>>;
|
|
314
311
|
}>;
|
|
315
312
|
items: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
316
313
|
path: import("@sinclair/typebox").TString;
|
|
317
314
|
name: import("@sinclair/typebox").TString;
|
|
318
|
-
source: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"human_upload">, import("@sinclair/typebox").TLiteral<"tutti_output">]>;
|
|
319
315
|
category: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"file">, import("@sinclair/typebox").TLiteral<"image">]>;
|
|
320
316
|
size_bytes: import("@sinclair/typebox").TInteger;
|
|
321
317
|
media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
@@ -359,7 +355,6 @@ export declare const UploadReferenceFileResultSchema: import("@sinclair/typebox"
|
|
|
359
355
|
file: import("@sinclair/typebox").TObject<{
|
|
360
356
|
path: import("@sinclair/typebox").TString;
|
|
361
357
|
name: import("@sinclair/typebox").TString;
|
|
362
|
-
source: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"human_upload">, import("@sinclair/typebox").TLiteral<"tutti_output">]>;
|
|
363
358
|
category: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"file">, import("@sinclair/typebox").TLiteral<"image">]>;
|
|
364
359
|
size_bytes: import("@sinclair/typebox").TInteger;
|
|
365
360
|
media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
@@ -496,6 +491,92 @@ export declare const UploadReferenceFileResultSchema: import("@sinclair/typebox"
|
|
|
496
491
|
task_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
497
492
|
run_result_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
498
493
|
}>>;
|
|
494
|
+
artifact_feedback: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
495
|
+
kind: import("@sinclair/typebox").TLiteral<"artifact_feedback">;
|
|
496
|
+
version: import("@sinclair/typebox").TLiteral<1>;
|
|
497
|
+
preview_generation: import("@sinclair/typebox").TString;
|
|
498
|
+
artifact_title: import("@sinclair/typebox").TString;
|
|
499
|
+
inspector_version: import("@sinclair/typebox").TLiteral<1>;
|
|
500
|
+
summary: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
501
|
+
annotations: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
502
|
+
document_url: import("@sinclair/typebox").TString;
|
|
503
|
+
comment: import("@sinclair/typebox").TString;
|
|
504
|
+
target: import("@sinclair/typebox").TObject<{
|
|
505
|
+
snapshot: import("@sinclair/typebox").TObject<{
|
|
506
|
+
element_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"control">, import("@sinclair/typebox").TLiteral<"content">, import("@sinclair/typebox").TLiteral<"container">]>;
|
|
507
|
+
tag_name: import("@sinclair/typebox").TString;
|
|
508
|
+
role: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
509
|
+
accessible_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
510
|
+
text_excerpt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
511
|
+
context: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
512
|
+
tag_name: import("@sinclair/typebox").TString;
|
|
513
|
+
role: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
514
|
+
accessible_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
515
|
+
}>>;
|
|
516
|
+
state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
517
|
+
expanded: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
518
|
+
selected: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
519
|
+
checked: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
520
|
+
pressed: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
521
|
+
disabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
522
|
+
}>>;
|
|
523
|
+
}>;
|
|
524
|
+
anchor: import("@sinclair/typebox").TObject<{
|
|
525
|
+
version: import("@sinclair/typebox").TLiteral<1>;
|
|
526
|
+
explicit_anchor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
527
|
+
stable_attributes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
528
|
+
id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
529
|
+
test_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
530
|
+
}>>;
|
|
531
|
+
semantic_path: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
532
|
+
role: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
533
|
+
accessible_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
534
|
+
}>>;
|
|
535
|
+
selector_path: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
536
|
+
root: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"document">, import("@sinclair/typebox").TLiteral<"open_shadow_root">]>;
|
|
537
|
+
selector: import("@sinclair/typebox").TString;
|
|
538
|
+
}>>;
|
|
539
|
+
}>;
|
|
540
|
+
fallback_context: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
541
|
+
snapshot: import("@sinclair/typebox").TObject<{
|
|
542
|
+
element_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"control">, import("@sinclair/typebox").TLiteral<"content">, import("@sinclair/typebox").TLiteral<"container">]>;
|
|
543
|
+
tag_name: import("@sinclair/typebox").TString;
|
|
544
|
+
role: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
545
|
+
accessible_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
546
|
+
text_excerpt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
547
|
+
context: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
548
|
+
tag_name: import("@sinclair/typebox").TString;
|
|
549
|
+
role: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
550
|
+
accessible_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
551
|
+
}>>;
|
|
552
|
+
state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
553
|
+
expanded: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
554
|
+
selected: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
555
|
+
checked: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
556
|
+
pressed: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
557
|
+
disabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
558
|
+
}>>;
|
|
559
|
+
}>;
|
|
560
|
+
anchor: import("@sinclair/typebox").TObject<{
|
|
561
|
+
version: import("@sinclair/typebox").TLiteral<1>;
|
|
562
|
+
explicit_anchor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
563
|
+
stable_attributes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
564
|
+
id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
565
|
+
test_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
566
|
+
}>>;
|
|
567
|
+
semantic_path: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
568
|
+
role: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
569
|
+
accessible_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
570
|
+
}>>;
|
|
571
|
+
selector_path: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
572
|
+
root: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"document">, import("@sinclair/typebox").TLiteral<"open_shadow_root">]>;
|
|
573
|
+
selector: import("@sinclair/typebox").TString;
|
|
574
|
+
}>>;
|
|
575
|
+
}>;
|
|
576
|
+
}>>;
|
|
577
|
+
}>;
|
|
578
|
+
}>>;
|
|
579
|
+
}>>;
|
|
499
580
|
}>>;
|
|
500
581
|
clarification_card: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
501
582
|
thread_id: import("@sinclair/typebox").TString;
|
|
@@ -164,7 +164,6 @@ export const ReferenceDirectoryProjectionSchema = Type.Object({
|
|
|
164
164
|
index_path: Type.Literal("docs/reference/README.md"),
|
|
165
165
|
files_path: Type.Literal("docs/reference/files"),
|
|
166
166
|
images_path: Type.Literal("docs/reference/images"),
|
|
167
|
-
tutti_path: Type.Literal("docs/reference/tutti"),
|
|
168
167
|
index_status: Type.Union([
|
|
169
168
|
Type.Literal("available"),
|
|
170
169
|
Type.Literal("missing"),
|
|
@@ -196,7 +195,6 @@ export const ReferenceSummaryProjectionSchema = Type.Object({
|
|
|
196
195
|
export const ReferenceFileProjectionSchema = Type.Object({
|
|
197
196
|
path: ViewerPathSchema,
|
|
198
197
|
name: NonEmptyStringSchema,
|
|
199
|
-
source: Type.Union([Type.Literal("human_upload"), Type.Literal("tutti_output")]),
|
|
200
198
|
category: ReferenceFileCategorySchema,
|
|
201
199
|
size_bytes: Type.Integer({ minimum: 0 }),
|
|
202
200
|
media_type: Type.Optional(NonEmptyStringSchema),
|
package/package.json
CHANGED
|
@@ -16,9 +16,9 @@ Use repository inspection and attached skills only when useful:
|
|
|
16
16
|
|
|
17
17
|
- Use `read-project-docs` for existing project documents and availability.
|
|
18
18
|
- Use `read-worklist` when repo state or completed formal tasks can explain the current implementation stage. Do not turn task results into a changelog.
|
|
19
|
-
- Use `read-references` only when a
|
|
19
|
+
- Use `read-references` only when a file in the shared project Reference space actually matters.
|
|
20
20
|
|
|
21
|
-
Reference
|
|
21
|
+
Reference creation events, file names, media types, paths, and summaries do not prove file contents. Read the relevant file before relying on it.
|
|
22
22
|
|
|
23
23
|
# Documentation Scope
|
|
24
24
|
|
|
@@ -62,5 +62,5 @@ Return only JSON matching this schema:
|
|
|
62
62
|
If no concrete documentation update is needed, return an empty `updates` array:
|
|
63
63
|
|
|
64
64
|
```json
|
|
65
|
-
{"summary":"Checked current docs against repository facts; no updates needed.","updates":[]}
|
|
65
|
+
{ "summary": "Checked current docs against repository facts; no updates needed.", "updates": [] }
|
|
66
66
|
```
|
|
@@ -36,9 +36,9 @@ You compile Tutti's Scratchpad into an append-only Worklist proposal for post-ba
|
|
|
36
36
|
Tutti can expose direct user-viewable outputs through two repo-backed surfaces when a task result is meant for project members to inspect:
|
|
37
37
|
|
|
38
38
|
- a single active visual artifact, declared by `tutti.artifact.json`, for previewable pages, apps, dashboards, or similar interactive outputs;
|
|
39
|
-
- generated files
|
|
39
|
+
- generated files in the shared `docs/reference/**` space, directly at the root or under a meaningful semantic subfolder, for reviewable files such as reports, notes, specs, exports, or similar outputs.
|
|
40
40
|
|
|
41
|
-
Treat these as delivery surfaces, not as task subjects by themselves.
|
|
41
|
+
Treat these as delivery surfaces, not as task subjects by themselves. Browser uploads continue to enter the Host-managed `docs/reference/files/` or `docs/reference/images/` partitions, `docs/reference/README.md` remains Host-owned, and stable project facts still belong in the relevant project docs or README-style files.
|
|
42
42
|
|
|
43
43
|
When the Scratchpad clearly asks for one of these direct deliverables, include a concise task `scope` item naming the expected surface. If a completion card should call out the result or generated file name, the scope may also mention `user_note_candidate`. Do not add artifact or generated-reference outputs solely to create feedback for ordinary implementation tasks.
|
|
44
44
|
|
|
@@ -377,7 +377,7 @@ Provider raw 输出:根对象只包含 `result`;`result` 内二选一输出
|
|
|
377
377
|
- Reference Files 不通过 built-in skill 暴露;若任务契约或 Project Docs 指向 `docs/reference/` 中资料,Codex 可直接读取相关 repo 文件正文。
|
|
378
378
|
- `goal / scope` 决定本次执行边界;`source_messages` 与 compile `clarification_rounds` 只提供该边界引用的精确材料,不自动扩展任务目标。
|
|
379
379
|
|
|
380
|
-
输出:根对象只包含 `result`;`result` 内四选一输出 `completed.{summary,user_note_candidate}`、`completed_no_repo_changes.{summary,user_note_candidate}`、`needs_human.{title,summary,request}` 或 `failed.summary`。`user_note_candidate` 是可选最终反馈候选,字段必填但可为 `null
|
|
380
|
+
输出:根对象只包含 `result`;`result` 内四选一输出 `completed.{summary,user_note_candidate}`、`completed_no_repo_changes.{summary,user_note_candidate}`、`needs_human.{title,summary,request}` 或 `failed.summary`。`user_note_candidate` 是可选最终反馈候选,字段必填但可为 `null`;生成给用户直接查看的文件应写入共享 `docs/reference/` 根目录或有意义的语义子目录,同时避开 Host-owned `README.md` 和通常由浏览器上传使用的 `files/`、`images/` 分区。`completed_no_repo_changes` 只用于任务契约不要求 repository file changes 的情况。`needs_human` payload 必须能直接作为 task-bound clarification request 使用:解释为什么 frozen contract 下无法安全继续,并提出一个具体、可回答、非 secret 的问题。
|
|
381
381
|
|
|
382
382
|
下游:Run pipeline 收集真实 Git diff 作为 `changed_paths`;`needs_human` 时 Control Plane 记录 `Run.needs_human`、打开 task-bound clarification 并把 task 迁回 `pending`;有 repo candidate 的 `completed` 结果先执行 Artifact candidate gate 与 checks,再在当前 `tutti/mainline` 创建 accepted commit + immutable activity tag;空 diff 的 `completed_no_repo_changes` 结果跳过 Artifact gate、checks 与 accepted checkpoint,记录 `promotion.status = not_attempted`。
|
|
383
383
|
|
|
@@ -33,9 +33,9 @@ For a continuation, the same task is already present in this conversation. The i
|
|
|
33
33
|
|
|
34
34
|
Use attached skills only when they help the task. `read-worklist` may clarify related formal work without expanding this task. `read-project-docs` may clarify architecture, setup, and maintenance rules. User skills may guide implementation but do not override the task, command policy, workspace policy, checks, or redaction rules.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Project members and Tutti share `docs/reference/**` as the member-viewable Reference space. Read a relevant source file before relying on it; do not infer its contents from a name, path, media type, upload message, or summary.
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
When this task needs to create an explicit reviewable deliverable, write it directly under `docs/reference/` or use a meaningful semantic subfolder such as `docs/reference/reports/`. Do not put temporary output, logs, internal notes, or canonical project documentation there. Do not overwrite unrelated existing References. `docs/reference/files/` and `docs/reference/images/` are normally reserved for Host-managed browser uploads, and `docs/reference/README.md` is Host-owned; do not modify them unless the task explicitly requires that exact existing file.
|
|
39
39
|
|
|
40
40
|
# Documentation
|
|
41
41
|
|
|
@@ -5,7 +5,7 @@ description: List and read bounded Tutti reference files when the turn has refer
|
|
|
5
5
|
|
|
6
6
|
# Read References
|
|
7
7
|
|
|
8
|
-
Use this skill when a Tutti app-server turn needs
|
|
8
|
+
Use this skill when a Tutti app-server turn needs material from the shared project Reference space. Files may have been uploaded by a project member or created by Tutti in an earlier Run.
|
|
9
9
|
|
|
10
10
|
When a Tutti context API runtime hint is present and includes `references:list`, list available references through:
|
|
11
11
|
|
|
@@ -19,7 +19,7 @@ When a listed text file is relevant and the hint includes `references:read`, rea
|
|
|
19
19
|
|
|
20
20
|
Read responses may include the same `summary` object alongside text or unavailable metadata.
|
|
21
21
|
|
|
22
|
-
Read only reference files that are relevant to the current task or question. Do not infer file contents from
|
|
22
|
+
Read only reference files that are relevant to the current task or question. Do not infer file contents from creation events, names, media types, paths, or summaries alone. If a file is unavailable, restricted, binary, too large, or unsupported, use the returned disposition instead of guessing.
|
|
23
23
|
|
|
24
24
|
This skill is read-only. Do not attempt to create, update, refresh, or write reference summaries from this skill.
|
|
25
25
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,S as t,T as n,_ as r,a as i,b as a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b,v as x,w as S,x as C,y as w}from"./index-DtZ_5QLQ.js";var T=S(`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`}]]),E=n();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=i((e-m.runEnd)/(m.executionComplete-m.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:t,assets:n}){let i=t>=m.artifactLive,o=t>=m.artifactClick,s=t>=m.runEnd&&t<m.executionComplete,u=f(t,m.runEnd,19.2),d=f(t,m.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:n.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:o?``:`is-active`,type:`button`,"aria-label":`Chat`,tabIndex:-1,children:(0,E.jsx)(r,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Worklist`,tabIndex:-1,children:(0,E.jsx)(w,{"aria-hidden":`true`})}),(0,E.jsxs)(`button`,{className:o?`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(d),children:`Live`}):null]}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`References`,tabIndex:-1,children:(0,E.jsx)(a,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Skills`,tabIndex:-1,children:(0,E.jsx)(c,{"aria-hidden":`true`})}),(0,E.jsx)(`button`,{type:`button`,"aria-label":`Timeline`,tabIndex:-1,children:(0,E.jsx)(e,{"aria-hidden":`true`})})]}),s?(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)(x,{"aria-hidden":`true`})}):null]}),(0,E.jsx)(`button`,{className:`scene-settings`,type:`button`,"aria-label":`Settings`,tabIndex:-1,children:(0,E.jsx)(g,{"aria-hidden":`true`})})]})}function N({time:e,assets:n}){let i=f(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)(r,{"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:n.humanAvatars.fey,alt:``})}),(0,E.jsx)(`i`,{className:`is-blue`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:n.humanAvatars.avery,alt:``})}),(0,E.jsx)(`i`,{className:`is-yellow`,children:(0,E.jsx)(`img`,{className:`scene-avatar-image`,src:n.humanAvatars.jun,alt:``})})]})]}),(0,E.jsxs)(`div`,{className:`scene-chat-stream`,children:[(0,E.jsx)(j,{progress:f(e,1.35,2.05),author:`Fey`,avatar:`fey`,tone:`green`,timestamp:`10:12`,online:!0,assets:n,children:`🏺 Let's build an online shop for our ceramics studio.`}),(0,E.jsx)(j,{progress:f(e,2.65,3.35),author:`Avery`,avatar:`avery`,tone:`blue`,timestamp:`10:13`,online:!0,assets:n,children:`✨ Keep it warm, minimal, and editorial.`}),(0,E.jsx)(j,{progress:f(e,3.95,4.65),author:`Jun`,avatar:`jun`,tone:`yellow`,timestamp:`10:14`,online:!0,assets:n,children:`🎨 Let people preview every piece in different glazes.`}),(0,E.jsx)(j,{progress:f(e,5.25,5.95),author:`Tutti`,avatar:`tutti`,tone:`green`,timestamp:`10:15`,assets:n,children:`Got it — I'll put it together. ✨`}),(0,E.jsxs)(`article`,{className:`scene-task-result`,style:D(i),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)(t,{})}),(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)(C,{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)(p,{})]})]})}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":f(e,m.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)(y,{"aria-hidden":`true`})}),(0,E.jsx)(`h2`,{children:`Scratchpad`})]}),(0,E.jsxs)(`div`,{className:`scene-scratchpad-body`,children:[(0,E.jsxs)(A,{progress:f(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:f(e,9.85,10.65),className:`scene-scratchpad-label`,children:`Confirmed`}),(0,E.jsx)(P,{progress:f(e,10.4,11.25),icon:(0,E.jsx)(t,{}),children:`Product-first editorial layout with generous space`}),(0,E.jsx)(P,{progress:f(e,11.2,12.05),icon:(0,E.jsx)(t,{}),children:`Warm neutrals with quiet serif headlines`}),(0,E.jsx)(P,{progress:f(e,12,12.85),icon:(0,E.jsx)(t,{}),children:`Keep the collection small, curated, and story-led`}),(0,E.jsx)(A,{progress:f(e,12.75,13.55),className:`scene-scratchpad-label`,children:`Requested feature`}),(0,E.jsx)(P,{progress:f(e,13.3,14.2),icon:(0,E.jsx)(s,{}),children:`Preview every piece in clay, sage, and ink glazes`})]}),(0,E.jsxs)(`footer`,{className:`scene-scratchpad-footer`,style:D(f(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)(u,{"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:n}){let r=f(e,18.92,19.2),i=v(e),a=i.id===`complete`,o={prepare:m.runEnd,implement:m.executionPrepareEnd,validate:m.executionImplementEnd,update:m.executionValidateEnd,complete:m.executionComplete}[i.id],s=f(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)(b,{})}),(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)(t,{}):(0,E.jsx)(x,{})}),(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:n,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=f(e,m.artifactClick,33.25),n=f(e,34.25,34.52),r=f(e,34.88,35.15),i=f(e,35.55,35.82),a=_(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=f(e,t,n,h);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>=m.runCursorStart&&e<18.92){let t=V(e,m.runCursorStart,m.runCursorArrive,{x:86,y:76},{x:94.25,y:94.2});return{visible:!0,x:t.x,y:t.y,clickPulse:H(e,m.runClickStart,m.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=d(e),r=U(e),i=o(e),a=f(e,.08,1.05,h);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:a,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)(T,{}),(0,E.jsx)(`i`,{})]})]})})}export{W as HomepageMotionScene};
|