@xfey/tutti 0.1.52 → 0.1.54

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 (47) hide show
  1. package/dist/artifacts/candidate-validator.d.ts +2 -3
  2. package/dist/artifacts/candidate-validator.js +0 -40
  3. package/dist/artifacts/index.d.ts +3 -3
  4. package/dist/artifacts/index.js +3 -3
  5. package/dist/artifacts/live-manifest.d.ts +23 -0
  6. package/dist/artifacts/live-manifest.js +115 -0
  7. package/dist/artifacts/preview-runtime.d.ts +34 -36
  8. package/dist/artifacts/preview-runtime.js +215 -273
  9. package/dist/artifacts/static-preview.d.ts +2 -1
  10. package/dist/artifacts/static-preview.js +19 -21
  11. package/dist/control-plane/index.d.ts +1 -0
  12. package/dist/control-plane/index.js +13 -2
  13. package/dist/control-plane/types.d.ts +4 -0
  14. package/dist/run-pipeline/openai.js +7 -12
  15. package/dist/server-shell/cli/host-server-runtime.js +20 -0
  16. package/dist/server-shell/http/routes/project-api/artifacts-routes.js +43 -110
  17. package/dist/server-shell/http/routes/project-api/openapi-artifacts-routes.d.ts +5 -8
  18. package/dist/server-shell/http/routes/project-api/openapi-artifacts-routes.js +5 -33
  19. package/dist/server-shell/http/routes/project-api/openapi.d.ts +17 -8
  20. package/dist/server-shell/http/routes/project-api/types.d.ts +3 -2
  21. package/dist/workspace-ops/index.d.ts +1 -1
  22. package/dist/workspace-ops/index.js +1 -1
  23. package/dist/workspace-ops/project-workspace.d.ts +0 -1
  24. package/dist/workspace-ops/project-workspace.js +0 -20
  25. package/dist/workspace-ops/types.d.ts +0 -2
  26. package/node_modules/@tutti/shared/dist/schemas/api/artifacts.d.ts +7 -88
  27. package/node_modules/@tutti/shared/dist/schemas/api/artifacts.js +3 -48
  28. package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +1 -1
  29. package/node_modules/@tutti/shared/dist/schemas/api/index.js +1 -1
  30. package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +1 -10
  31. package/package.json +1 -1
  32. package/prompts/prompt-flow-map.md +4 -4
  33. package/prompts/runs/README.md +2 -1
  34. package/prompts/runs/task-continuation.md +1 -0
  35. package/prompts/runs/task-retry.md +3 -2
  36. package/prompts/runs/task-run.md +1 -0
  37. package/web/assets/{homepage-motion-scene-ENUzAyyp.js → homepage-motion-scene-C96Na8TV.js} +1 -1
  38. package/web/assets/{index-DK8LBgHp.js → index-CM41hrQd.js} +3 -3
  39. package/web/assets/index-nWy1QP97.css +1 -0
  40. package/web/assets/tutti_avatar-_0Yc-cMJ.png +0 -0
  41. package/web/index.html +2 -2
  42. package/dist/artifacts/manifest.d.ts +0 -41
  43. package/dist/artifacts/manifest.js +0 -169
  44. package/dist/run-pipeline/candidate-diff.d.ts +0 -3
  45. package/dist/run-pipeline/candidate-diff.js +0 -4
  46. package/web/assets/index-CWWkCr48.css +0 -1
  47. package/web/assets/tutti_avatar-BBhaZGi3.png +0 -0
@@ -1,6 +1,5 @@
1
1
  import type { ActivityRef, TaskId } from "@tutti/shared/ids";
2
2
  import type { AcceptedCheckpointRecoveryResult, AcceptedCheckpointResult, CreateAcceptedCheckpointOptions, ProjectWorkspaceInspection, RunDiffSummary } from "./types.js";
3
- export declare function fingerprintProjectSourceState(workspaceRoot: string): string;
4
3
  export declare function collectProjectSourceDiff(workspaceRoot: string): RunDiffSummary;
5
4
  export declare function inspectProjectWorkspace(workspaceRoot: string): ProjectWorkspaceInspection;
6
5
  export declare function recoverAcceptedCheckpoint(options: {
@@ -1,4 +1,3 @@
1
- import { createHash } from "node:crypto";
2
1
  import { classifyRepositoryPathMetadata } from "@tutti/shared/utils";
3
2
  import { WorkspaceOpsError } from "./errors.js";
4
3
  import { runGit, runGitRaw, runGitText, stagedChangesExist, summarizeGitFailure, tryGitText, } from "./git.js";
@@ -48,20 +47,6 @@ function requireGitCommandSuccess(args, workspaceRoot) {
48
47
  }
49
48
  return result;
50
49
  }
51
- export function fingerprintProjectSourceState(workspaceRoot) {
52
- const status = requireGitCommandSuccess(["status", "--porcelain=v1", "-z"], workspaceRoot);
53
- const diff = requireGitCommandSuccess(["diff", "--binary", "HEAD", "--"], workspaceRoot);
54
- const untracked = requireGitCommandSuccess(["ls-files", "--others", "--exclude-standard", "-z"], workspaceRoot);
55
- const hash = createHash("sha256").update(status.stdout).update(diff.stdout);
56
- for (const path of untracked.stdout.toString("utf8").split("\0")) {
57
- if (path.length === 0) {
58
- continue;
59
- }
60
- const object = requireGitCommandSuccess(["hash-object", "--no-filters", "--", path], workspaceRoot);
61
- hash.update(path).update("\0").update(object.stdout);
62
- }
63
- return hash.digest("hex");
64
- }
65
50
  export function collectProjectSourceDiff(workspaceRoot) {
66
51
  const status = requireGitCommandSuccess(["status", "--porcelain=v1", "-z"], workspaceRoot);
67
52
  const changedPaths = parsePorcelainChangedPaths(status.stdout);
@@ -82,7 +67,6 @@ export function collectProjectSourceDiff(workspaceRoot) {
82
67
  has_changes: status.stdout.length > 0,
83
68
  changed_paths: changedPaths,
84
69
  summary: truncateText(summaryParts.join("\n\n"), MAX_RUN_DIFF_SUMMARY_BYTES),
85
- fingerprint: fingerprintProjectSourceState(workspaceRoot),
86
70
  };
87
71
  }
88
72
  function acceptedTagName(workspaceRoot, activityRef) {
@@ -225,10 +209,6 @@ export function createAcceptedCheckpoint(options) {
225
209
  };
226
210
  }
227
211
  const inspection = inspectProjectWorkspace(options.workspaceRoot);
228
- if (options.expectedSourceFingerprint !== undefined &&
229
- fingerprintProjectSourceState(options.workspaceRoot) !== options.expectedSourceFingerprint) {
230
- throw new WorkspaceOpsError("conflict", "Project source changed after validation and before accepted checkpoint", { reason_code: "accepted_checkpoint_candidate_changed" });
231
- }
232
212
  runGit(["add", "-A"], options.workspaceRoot);
233
213
  if (!stagedChangesExist(options.workspaceRoot)) {
234
214
  throw new WorkspaceOpsError("validation_failed", "Accepted checkpoint has no staged source changes", { reason_code: "accepted_checkpoint_candidate_missing" });
@@ -170,7 +170,6 @@ export type RunDiffSummary = {
170
170
  has_changes: boolean;
171
171
  changed_paths: string[];
172
172
  summary: string;
173
- fingerprint: string;
174
173
  };
175
174
  export type ProjectWorkspaceInspection = {
176
175
  workspace_root: string;
@@ -181,7 +180,6 @@ export type CreateAcceptedCheckpointOptions = WorkspaceViewerOptions & {
181
180
  taskId: TaskId;
182
181
  activityRef: ActivityRef;
183
182
  summary: string;
184
- expectedSourceFingerprint?: string;
185
183
  };
186
184
  export type AcceptedCheckpointResult = {
187
185
  promoted_commit_oid: string;
@@ -1,4 +1,3 @@
1
- export declare const ArtifactManifestPathSchema: import("@sinclair/typebox").TLiteral<"tutti.artifact.json">;
2
1
  export declare const ArtifactKindSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"static">, import("@sinclair/typebox").TLiteral<"server">]>;
3
2
  export declare const ArtifactTitleSchema: import("@sinclair/typebox").TString;
4
3
  export declare const ArtifactStaticManifestSchema: import("@sinclair/typebox").TObject<{
@@ -31,14 +30,14 @@ export declare const ArtifactManifestSchema: import("@sinclair/typebox").TObject
31
30
  network: import("@sinclair/typebox").TBoolean;
32
31
  }>]>;
33
32
  }>;
34
- export declare const ArtifactPreviewStatusSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"stopped">, import("@sinclair/typebox").TLiteral<"failed">]>;
33
+ export declare const ArtifactPreviewStatusSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"idle">, import("@sinclair/typebox").TLiteral<"failed">]>;
35
34
  export declare const ArtifactSummaryProjectionSchema: import("@sinclair/typebox").TObject<{
36
35
  title: import("@sinclair/typebox").TString;
37
36
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"static">, import("@sinclair/typebox").TLiteral<"server">]>;
38
37
  network: import("@sinclair/typebox").TBoolean;
39
38
  }>;
40
39
  export declare const ArtifactPreviewProjectionSchema: import("@sinclair/typebox").TObject<{
41
- status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"stopped">, import("@sinclair/typebox").TLiteral<"failed">]>;
40
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"idle">, import("@sinclair/typebox").TLiteral<"failed">]>;
42
41
  url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
43
42
  error_message: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
44
43
  }>;
@@ -46,22 +45,20 @@ export declare const ArtifactProjectionSchema: import("@sinclair/typebox").TUnio
46
45
  status: import("@sinclair/typebox").TLiteral<"not_declared">;
47
46
  }>, import("@sinclair/typebox").TObject<{
48
47
  status: import("@sinclair/typebox").TLiteral<"invalid">;
49
- manifest_path: import("@sinclair/typebox").TLiteral<"tutti.artifact.json">;
50
48
  error: import("@sinclair/typebox").TObject<{
51
49
  code: import("@sinclair/typebox").TString;
52
50
  message: import("@sinclair/typebox").TString;
53
51
  }>;
54
52
  }>, import("@sinclair/typebox").TObject<{
55
53
  status: import("@sinclair/typebox").TLiteral<"declared">;
56
- manifest_path: import("@sinclair/typebox").TLiteral<"tutti.artifact.json">;
57
- manifest_blob_oid: import("@sinclair/typebox").TString;
54
+ preview_generation: import("@sinclair/typebox").TString;
58
55
  artifact: import("@sinclair/typebox").TObject<{
59
56
  title: import("@sinclair/typebox").TString;
60
57
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"static">, import("@sinclair/typebox").TLiteral<"server">]>;
61
58
  network: import("@sinclair/typebox").TBoolean;
62
59
  }>;
63
60
  preview: import("@sinclair/typebox").TObject<{
64
- status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"stopped">, import("@sinclair/typebox").TLiteral<"failed">]>;
61
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"idle">, import("@sinclair/typebox").TLiteral<"failed">]>;
65
62
  url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
66
63
  error_message: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
67
64
  }>;
@@ -71,22 +68,20 @@ export declare const GetArtifactsResponseSchema: import("@sinclair/typebox").TOb
71
68
  status: import("@sinclair/typebox").TLiteral<"not_declared">;
72
69
  }>, import("@sinclair/typebox").TObject<{
73
70
  status: import("@sinclair/typebox").TLiteral<"invalid">;
74
- manifest_path: import("@sinclair/typebox").TLiteral<"tutti.artifact.json">;
75
71
  error: import("@sinclair/typebox").TObject<{
76
72
  code: import("@sinclair/typebox").TString;
77
73
  message: import("@sinclair/typebox").TString;
78
74
  }>;
79
75
  }>, import("@sinclair/typebox").TObject<{
80
76
  status: import("@sinclair/typebox").TLiteral<"declared">;
81
- manifest_path: import("@sinclair/typebox").TLiteral<"tutti.artifact.json">;
82
- manifest_blob_oid: import("@sinclair/typebox").TString;
77
+ preview_generation: import("@sinclair/typebox").TString;
83
78
  artifact: import("@sinclair/typebox").TObject<{
84
79
  title: import("@sinclair/typebox").TString;
85
80
  kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"static">, import("@sinclair/typebox").TLiteral<"server">]>;
86
81
  network: import("@sinclair/typebox").TBoolean;
87
82
  }>;
88
83
  preview: import("@sinclair/typebox").TObject<{
89
- status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"stopped">, import("@sinclair/typebox").TLiteral<"failed">]>;
84
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"idle">, import("@sinclair/typebox").TLiteral<"failed">]>;
90
85
  url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
91
86
  error_message: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
92
87
  }>;
@@ -102,7 +97,7 @@ export declare const IssueArtifactPreviewSessionDispositionSchema: import("@sinc
102
97
  message: import("@sinclair/typebox").TString;
103
98
  }>, import("@sinclair/typebox").TObject<{
104
99
  kind: import("@sinclair/typebox").TLiteral<"preview_not_ready">;
105
- status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"stopped">, import("@sinclair/typebox").TLiteral<"failed">]>;
100
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"idle">, import("@sinclair/typebox").TLiteral<"failed">]>;
106
101
  message: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
107
102
  }>, import("@sinclair/typebox").TObject<{
108
103
  kind: import("@sinclair/typebox").TLiteral<"interrupted">;
@@ -114,80 +109,4 @@ export declare const IssueArtifactPreviewSessionResultSchema: import("@sinclair/
114
109
  }>;
115
110
  export declare const IssueArtifactPreviewSessionBodySchema: import("@sinclair/typebox").TSchema;
116
111
  export declare const IssueArtifactPreviewSessionResponseSchema: import("@sinclair/typebox").TSchema;
117
- export declare const ArtifactPreviewCommandPayloadSchema: import("@sinclair/typebox").TObject<{}>;
118
- export declare const StartArtifactPreviewDispositionSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
119
- kind: import("@sinclair/typebox").TLiteral<"started">;
120
- }>, import("@sinclair/typebox").TObject<{
121
- kind: import("@sinclair/typebox").TLiteral<"already_running">;
122
- }>, import("@sinclair/typebox").TObject<{
123
- kind: import("@sinclair/typebox").TLiteral<"starting">;
124
- }>, import("@sinclair/typebox").TObject<{
125
- kind: import("@sinclair/typebox").TLiteral<"not_declared">;
126
- }>, import("@sinclair/typebox").TObject<{
127
- kind: import("@sinclair/typebox").TLiteral<"invalid_manifest">;
128
- message: import("@sinclair/typebox").TString;
129
- }>, import("@sinclair/typebox").TObject<{
130
- kind: import("@sinclair/typebox").TLiteral<"unsupported">;
131
- }>, import("@sinclair/typebox").TObject<{
132
- kind: import("@sinclair/typebox").TLiteral<"interrupted">;
133
- retry_with_new_command_id: import("@sinclair/typebox").TLiteral<true>;
134
- }>]>;
135
- export declare const HeartbeatArtifactPreviewDispositionSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
136
- kind: import("@sinclair/typebox").TLiteral<"recorded">;
137
- }>, import("@sinclair/typebox").TObject<{
138
- kind: import("@sinclair/typebox").TLiteral<"not_running">;
139
- }>, import("@sinclair/typebox").TObject<{
140
- kind: import("@sinclair/typebox").TLiteral<"not_declared">;
141
- }>, import("@sinclair/typebox").TObject<{
142
- kind: import("@sinclair/typebox").TLiteral<"invalid_manifest">;
143
- message: import("@sinclair/typebox").TString;
144
- }>, import("@sinclair/typebox").TObject<{
145
- kind: import("@sinclair/typebox").TLiteral<"interrupted">;
146
- retry_with_new_command_id: import("@sinclair/typebox").TLiteral<true>;
147
- }>]>;
148
- export declare const StopArtifactPreviewDispositionSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
149
- kind: import("@sinclair/typebox").TLiteral<"stopped">;
150
- }>, import("@sinclair/typebox").TObject<{
151
- kind: import("@sinclair/typebox").TLiteral<"not_running">;
152
- }>, import("@sinclair/typebox").TObject<{
153
- kind: import("@sinclair/typebox").TLiteral<"not_declared">;
154
- }>, import("@sinclair/typebox").TObject<{
155
- kind: import("@sinclair/typebox").TLiteral<"invalid_manifest">;
156
- message: import("@sinclair/typebox").TString;
157
- }>, import("@sinclair/typebox").TObject<{
158
- kind: import("@sinclair/typebox").TLiteral<"interrupted">;
159
- retry_with_new_command_id: import("@sinclair/typebox").TLiteral<true>;
160
- }>]>;
161
- export declare const ArtifactPreviewCommandResultSchema: import("@sinclair/typebox").TObject<{
162
- artifact: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
163
- status: import("@sinclair/typebox").TLiteral<"not_declared">;
164
- }>, import("@sinclair/typebox").TObject<{
165
- status: import("@sinclair/typebox").TLiteral<"invalid">;
166
- manifest_path: import("@sinclair/typebox").TLiteral<"tutti.artifact.json">;
167
- error: import("@sinclair/typebox").TObject<{
168
- code: import("@sinclair/typebox").TString;
169
- message: import("@sinclair/typebox").TString;
170
- }>;
171
- }>, import("@sinclair/typebox").TObject<{
172
- status: import("@sinclair/typebox").TLiteral<"declared">;
173
- manifest_path: import("@sinclair/typebox").TLiteral<"tutti.artifact.json">;
174
- manifest_blob_oid: import("@sinclair/typebox").TString;
175
- artifact: import("@sinclair/typebox").TObject<{
176
- title: import("@sinclair/typebox").TString;
177
- kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"static">, import("@sinclair/typebox").TLiteral<"server">]>;
178
- network: import("@sinclair/typebox").TBoolean;
179
- }>;
180
- preview: import("@sinclair/typebox").TObject<{
181
- status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"starting">, import("@sinclair/typebox").TLiteral<"stopped">, import("@sinclair/typebox").TLiteral<"failed">]>;
182
- url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
183
- error_message: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
184
- }>;
185
- }>]>;
186
- }>;
187
- export declare const StartArtifactPreviewBodySchema: import("@sinclair/typebox").TSchema;
188
- export declare const StartArtifactPreviewResponseSchema: import("@sinclair/typebox").TSchema;
189
- export declare const HeartbeatArtifactPreviewBodySchema: import("@sinclair/typebox").TSchema;
190
- export declare const HeartbeatArtifactPreviewResponseSchema: import("@sinclair/typebox").TSchema;
191
- export declare const StopArtifactPreviewBodySchema: import("@sinclair/typebox").TSchema;
192
- export declare const StopArtifactPreviewResponseSchema: import("@sinclair/typebox").TSchema;
193
112
  //# sourceMappingURL=artifacts.d.ts.map
@@ -1,7 +1,6 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import { IsoDateTimeStringSchema } from "../domain/index.js";
3
3
  import { InterruptedCommandDispositionSchema, NonEmptyStringSchema, commandEnvelopeSchema, commandResponseWithResultSchema, } from "./primitives.js";
4
- export const ArtifactManifestPathSchema = Type.Literal("tutti.artifact.json");
5
4
  export const ArtifactKindSchema = Type.Union([Type.Literal("static"), Type.Literal("server")]);
6
5
  export const ArtifactTitleSchema = Type.String({ minLength: 1, maxLength: 120, pattern: "\\S" });
7
6
  const ArtifactRepoPathSchema = Type.String({ minLength: 1 });
@@ -26,7 +25,7 @@ export const ArtifactManifestSchema = Type.Object({
26
25
  export const ArtifactPreviewStatusSchema = Type.Union([
27
26
  Type.Literal("ready"),
28
27
  Type.Literal("starting"),
29
- Type.Literal("stopped"),
28
+ Type.Literal("idle"),
30
29
  Type.Literal("failed"),
31
30
  ]);
32
31
  export const ArtifactSummaryProjectionSchema = Type.Object({
@@ -45,7 +44,6 @@ export const ArtifactProjectionSchema = Type.Union([
45
44
  }, { additionalProperties: false }),
46
45
  Type.Object({
47
46
  status: Type.Literal("invalid"),
48
- manifest_path: ArtifactManifestPathSchema,
49
47
  error: Type.Object({
50
48
  code: NonEmptyStringSchema,
51
49
  message: NonEmptyStringSchema,
@@ -53,8 +51,7 @@ export const ArtifactProjectionSchema = Type.Union([
53
51
  }, { additionalProperties: false }),
54
52
  Type.Object({
55
53
  status: Type.Literal("declared"),
56
- manifest_path: ArtifactManifestPathSchema,
57
- manifest_blob_oid: NonEmptyStringSchema,
54
+ preview_generation: NonEmptyStringSchema,
58
55
  artifact: ArtifactSummaryProjectionSchema,
59
56
  preview: ArtifactPreviewProjectionSchema,
60
57
  }, { additionalProperties: false }),
@@ -74,7 +71,7 @@ export const IssueArtifactPreviewSessionDispositionSchema = Type.Union([
74
71
  kind: Type.Literal("preview_not_ready"),
75
72
  status: Type.Union([
76
73
  Type.Literal("starting"),
77
- Type.Literal("stopped"),
74
+ Type.Literal("idle"),
78
75
  Type.Literal("failed"),
79
76
  ]),
80
77
  message: Type.Optional(NonEmptyStringSchema),
@@ -87,46 +84,4 @@ export const IssueArtifactPreviewSessionResultSchema = Type.Object({
87
84
  }, { additionalProperties: false });
88
85
  export const IssueArtifactPreviewSessionBodySchema = commandEnvelopeSchema(IssueArtifactPreviewSessionPayloadSchema);
89
86
  export const IssueArtifactPreviewSessionResponseSchema = commandResponseWithResultSchema(IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionResultSchema);
90
- export const ArtifactPreviewCommandPayloadSchema = Type.Object({}, { additionalProperties: false });
91
- export const StartArtifactPreviewDispositionSchema = Type.Union([
92
- Type.Object({ kind: Type.Literal("started") }, { additionalProperties: false }),
93
- Type.Object({ kind: Type.Literal("already_running") }, { additionalProperties: false }),
94
- Type.Object({ kind: Type.Literal("starting") }, { additionalProperties: false }),
95
- Type.Object({ kind: Type.Literal("not_declared") }, { additionalProperties: false }),
96
- Type.Object({
97
- kind: Type.Literal("invalid_manifest"),
98
- message: NonEmptyStringSchema,
99
- }, { additionalProperties: false }),
100
- Type.Object({ kind: Type.Literal("unsupported") }, { additionalProperties: false }),
101
- InterruptedCommandDispositionSchema,
102
- ]);
103
- export const HeartbeatArtifactPreviewDispositionSchema = Type.Union([
104
- Type.Object({ kind: Type.Literal("recorded") }, { additionalProperties: false }),
105
- Type.Object({ kind: Type.Literal("not_running") }, { additionalProperties: false }),
106
- Type.Object({ kind: Type.Literal("not_declared") }, { additionalProperties: false }),
107
- Type.Object({
108
- kind: Type.Literal("invalid_manifest"),
109
- message: NonEmptyStringSchema,
110
- }, { additionalProperties: false }),
111
- InterruptedCommandDispositionSchema,
112
- ]);
113
- export const StopArtifactPreviewDispositionSchema = Type.Union([
114
- Type.Object({ kind: Type.Literal("stopped") }, { additionalProperties: false }),
115
- Type.Object({ kind: Type.Literal("not_running") }, { additionalProperties: false }),
116
- Type.Object({ kind: Type.Literal("not_declared") }, { additionalProperties: false }),
117
- Type.Object({
118
- kind: Type.Literal("invalid_manifest"),
119
- message: NonEmptyStringSchema,
120
- }, { additionalProperties: false }),
121
- InterruptedCommandDispositionSchema,
122
- ]);
123
- export const ArtifactPreviewCommandResultSchema = Type.Object({
124
- artifact: ArtifactProjectionSchema,
125
- }, { additionalProperties: false });
126
- export const StartArtifactPreviewBodySchema = commandEnvelopeSchema(ArtifactPreviewCommandPayloadSchema);
127
- export const StartArtifactPreviewResponseSchema = commandResponseWithResultSchema(StartArtifactPreviewDispositionSchema, ArtifactPreviewCommandResultSchema);
128
- export const HeartbeatArtifactPreviewBodySchema = commandEnvelopeSchema(ArtifactPreviewCommandPayloadSchema);
129
- export const HeartbeatArtifactPreviewResponseSchema = commandResponseWithResultSchema(HeartbeatArtifactPreviewDispositionSchema, ArtifactPreviewCommandResultSchema);
130
- export const StopArtifactPreviewBodySchema = commandEnvelopeSchema(ArtifactPreviewCommandPayloadSchema);
131
- export const StopArtifactPreviewResponseSchema = commandResponseWithResultSchema(StopArtifactPreviewDispositionSchema, ArtifactPreviewCommandResultSchema);
132
87
  //# sourceMappingURL=artifacts.js.map
@@ -11,7 +11,7 @@ export { CheckSkipReasonCodeSchema, ExternalSideEffectSummaryProjectionSchema, G
11
11
  export { ActiveApprovalProjectionSchema, ApprovalCommandProjectionSchema, ApprovalDecisionKindSchema, ApprovalDecisionOptionProjectionSchema, ApprovalDecisionToneSchema, ApprovalFileChangeProjectionSchema, ApprovalPermissionsProjectionSchema, ApprovalRequestKindSchema, ApprovalRequestProjectionSchema, ApprovalResolutionOutcomeSchema, ApprovalResolutionProjectionSchema, DecideApprovalBodySchema, DecideApprovalDispositionSchema, DecideApprovalPayloadSchema, DecideApprovalResponseSchema, DecideApprovalResultSchema, } from "./approvals.js";
12
12
  export { ActiveClarificationProjectionSchema, ClarificationChangedEventPayloadSchema, ClarificationOwnerProjectionSchema, ClarificationRequestPayloadSchema, ClarificationRoundProjectionSchema, ClarificationRoundSummaryProjectionSchema, ClarificationSuccessorRefSchema, ClarificationThreadProjectionSchema, ContextRefSchema, GetClarificationRoundMessagesRequestSchema, GetClarificationRoundResponseSchema, GetClarificationThreadResponseSchema, HumanInteractionPayloadSchema, HumanRequestPayloadSchema, SendClarificationRoundMessageBodySchema, SendClarificationRoundMessageDispositionSchema, SendClarificationRoundMessagePayloadSchema, SendClarificationRoundMessageResponseSchema, SendClarificationRoundMessageResultSchema, SubmitClarificationRoundBodySchema, SubmitClarificationRoundDispositionSchema, SubmitClarificationRoundPayloadSchema, SubmitClarificationRoundResponseSchema, SubmitClarificationRoundResultSchema, } from "./clarifications.js";
13
13
  export { GetProjectDocRequestSchema, GetProjectDocResponseSchema, GetProjectDocsResponseSchema, GetReferenceFilesRequestSchema, GetReferenceFilesResponseSchema, GetViewerAssetRequestSchema, GetViewerFileRequestSchema, GetViewerFileResponseSchema, GetViewerTreeRequestSchema, GetViewerTreeResponseSchema, ProjectDocKeySchema, ProjectDocParamsSchema, ProjectDocSummaryProjectionSchema, ReferenceDirectoryProjectionSchema, ReferenceFileProjectionSchema, ReferenceSummaryProjectionSchema, ReferenceTextReadBlockedReasonSchema, RefreshReferenceSummariesBodySchema, RefreshReferenceSummariesDispositionSchema, RefreshReferenceSummariesPayloadSchema, RefreshReferenceSummariesResponseSchema, RefreshReferenceSummariesResultSchema, UploadReferenceFileBodySchema, UploadReferenceFileDispositionSchema, UploadReferenceFilePayloadSchema, UploadReferenceFileResponseSchema, UploadReferenceFileResultSchema, ViewerAssetVariantSchema, ViewerFileContentProjectionSchema, ViewerFileProjectionSchema, ViewerPageSchema, ViewerPathSchema, ViewerRepoSnapshotSchema, ViewerTreeEntryProjectionSchema, ViewerTreeTextReadBlockedReasonSchema, ViewerUnreadableReasonSchema, } from "./viewer-reference.js";
14
- export { ArtifactKindSchema, ArtifactManifestPathSchema, ArtifactManifestSchema, ArtifactPreviewCommandPayloadSchema, ArtifactPreviewCommandResultSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, ArtifactTitleSchema, ArtifactProjectionSchema, GetArtifactsResponseSchema, HeartbeatArtifactPreviewBodySchema, HeartbeatArtifactPreviewDispositionSchema, HeartbeatArtifactPreviewResponseSchema, IssueArtifactPreviewSessionBodySchema, IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionPayloadSchema, IssueArtifactPreviewSessionResponseSchema, IssueArtifactPreviewSessionResultSchema, StartArtifactPreviewBodySchema, StartArtifactPreviewDispositionSchema, StartArtifactPreviewResponseSchema, StopArtifactPreviewBodySchema, StopArtifactPreviewDispositionSchema, StopArtifactPreviewResponseSchema, } from "./artifacts.js";
14
+ export { ArtifactKindSchema, ArtifactManifestSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, ArtifactTitleSchema, ArtifactProjectionSchema, GetArtifactsResponseSchema, IssueArtifactPreviewSessionBodySchema, IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionPayloadSchema, IssueArtifactPreviewSessionResponseSchema, IssueArtifactPreviewSessionResultSchema, } from "./artifacts.js";
15
15
  export { DeleteSkillBodySchema, DeleteSkillDispositionSchema, DeleteSkillPayloadSchema, DeleteSkillResponseSchema, GetSkillParamsSchema, GetSkillResponseSchema, GetSkillsResponseSchema, ImportSkillZipBodySchema, ImportSkillZipDispositionSchema, ImportSkillZipPayloadSchema, ImportSkillZipResponseSchema, ImportSkillZipResultSchema, SkillDetailProjectionSchema, SkillNameSchema, SkillProjectionSchema, } from "./skills.js";
16
16
  export { ActivityEventProjectionSchema, ActivityEventSsePayloadSchema, ApprovalChangedEventPayloadSchema, ActivityProjectionSchema, ConnectionReadyEventPayloadSchema, ExecutionActivitySummarySchema, ExecutionStatusChangedEventPayloadSchema, ExecutionStatusKindSchema, ExecutionStatusProjectionSchema, ProcedureLaneSchema, ProviderConfigChangedEventPayloadSchema, QueryInvalidateEventPayloadSchema, ScratchpadUpdatedEventPayloadSchema, TaskDetailUpdatedEventPayloadSchema, TaskUpdatedEventPayloadSchema, WorklistChangedEventPayloadSchema, WorkspaceRecoveredEventPayloadSchema, } from "./runtime-events.js";
17
17
  export { ContextSyncBodySchema, ContextSyncDispositionSchema, ContextSyncPayloadSchema, ContextSyncResponseSchema, ContextSyncResultSchema, InitializeProjectDocsBodySchema, InitializeProjectDocsDispositionSchema, InitializeProjectDocsPayloadSchema, InitializeProjectDocsResponseSchema, InitializeProjectDocsResultSchema, ProjectDocsProcedureStartResultSchema, RefreshScratchpadDispositionSchema, RefreshScratchpadResultSchema, RunSchedulerNowBodySchema, RunSchedulerNowDispositionSchema, RunSchedulerNowPayloadSchema, RunSchedulerNowResponseSchema, SubmitWorklistBodySchema, SubmitWorklistDispositionSchema, SubmitWorklistPayloadSchema, SubmitWorklistResponseSchema, SubmitWorklistResultSchema, UpdateProjectDescriptionBodySchema, UpdateProjectDescriptionDispositionSchema, UpdateProjectDescriptionPayloadSchema, UpdateProjectDescriptionResponseSchema, UpdateProjectDescriptionResultSchema, UpdateProjectDisplayNameBodySchema, UpdateProjectDisplayNameDispositionSchema, UpdateProjectDisplayNamePayloadSchema, UpdateProjectDisplayNameResponseSchema, UpdateProjectDisplayNameResultSchema, } from "./workspace-commands.js";
@@ -10,7 +10,7 @@ export { CheckSkipReasonCodeSchema, ExternalSideEffectSummaryProjectionSchema, G
10
10
  export { ActiveApprovalProjectionSchema, ApprovalCommandProjectionSchema, ApprovalDecisionKindSchema, ApprovalDecisionOptionProjectionSchema, ApprovalDecisionToneSchema, ApprovalFileChangeProjectionSchema, ApprovalPermissionsProjectionSchema, ApprovalRequestKindSchema, ApprovalRequestProjectionSchema, ApprovalResolutionOutcomeSchema, ApprovalResolutionProjectionSchema, DecideApprovalBodySchema, DecideApprovalDispositionSchema, DecideApprovalPayloadSchema, DecideApprovalResponseSchema, DecideApprovalResultSchema, } from "./approvals.js";
11
11
  export { ActiveClarificationProjectionSchema, ClarificationChangedEventPayloadSchema, ClarificationOwnerProjectionSchema, ClarificationRequestPayloadSchema, ClarificationRoundProjectionSchema, ClarificationRoundSummaryProjectionSchema, ClarificationSuccessorRefSchema, ClarificationThreadProjectionSchema, ContextRefSchema, GetClarificationRoundMessagesRequestSchema, GetClarificationRoundResponseSchema, GetClarificationThreadResponseSchema, HumanInteractionPayloadSchema, HumanRequestPayloadSchema, SendClarificationRoundMessageBodySchema, SendClarificationRoundMessageDispositionSchema, SendClarificationRoundMessagePayloadSchema, SendClarificationRoundMessageResponseSchema, SendClarificationRoundMessageResultSchema, SubmitClarificationRoundBodySchema, SubmitClarificationRoundDispositionSchema, SubmitClarificationRoundPayloadSchema, SubmitClarificationRoundResponseSchema, SubmitClarificationRoundResultSchema, } from "./clarifications.js";
12
12
  export { GetProjectDocRequestSchema, GetProjectDocResponseSchema, GetProjectDocsResponseSchema, GetReferenceFilesRequestSchema, GetReferenceFilesResponseSchema, GetViewerAssetRequestSchema, GetViewerFileRequestSchema, GetViewerFileResponseSchema, GetViewerTreeRequestSchema, GetViewerTreeResponseSchema, ProjectDocKeySchema, ProjectDocParamsSchema, ProjectDocSummaryProjectionSchema, ReferenceDirectoryProjectionSchema, ReferenceFileProjectionSchema, ReferenceSummaryProjectionSchema, ReferenceTextReadBlockedReasonSchema, RefreshReferenceSummariesBodySchema, RefreshReferenceSummariesDispositionSchema, RefreshReferenceSummariesPayloadSchema, RefreshReferenceSummariesResponseSchema, RefreshReferenceSummariesResultSchema, UploadReferenceFileBodySchema, UploadReferenceFileDispositionSchema, UploadReferenceFilePayloadSchema, UploadReferenceFileResponseSchema, UploadReferenceFileResultSchema, ViewerAssetVariantSchema, ViewerFileContentProjectionSchema, ViewerFileProjectionSchema, ViewerPageSchema, ViewerPathSchema, ViewerRepoSnapshotSchema, ViewerTreeEntryProjectionSchema, ViewerTreeTextReadBlockedReasonSchema, ViewerUnreadableReasonSchema, } from "./viewer-reference.js";
13
- export { ArtifactKindSchema, ArtifactManifestPathSchema, ArtifactManifestSchema, ArtifactPreviewCommandPayloadSchema, ArtifactPreviewCommandResultSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, ArtifactTitleSchema, ArtifactProjectionSchema, GetArtifactsResponseSchema, HeartbeatArtifactPreviewBodySchema, HeartbeatArtifactPreviewDispositionSchema, HeartbeatArtifactPreviewResponseSchema, IssueArtifactPreviewSessionBodySchema, IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionPayloadSchema, IssueArtifactPreviewSessionResponseSchema, IssueArtifactPreviewSessionResultSchema, StartArtifactPreviewBodySchema, StartArtifactPreviewDispositionSchema, StartArtifactPreviewResponseSchema, StopArtifactPreviewBodySchema, StopArtifactPreviewDispositionSchema, StopArtifactPreviewResponseSchema, } from "./artifacts.js";
13
+ export { ArtifactKindSchema, ArtifactManifestSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, ArtifactTitleSchema, ArtifactProjectionSchema, GetArtifactsResponseSchema, IssueArtifactPreviewSessionBodySchema, IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionPayloadSchema, IssueArtifactPreviewSessionResponseSchema, IssueArtifactPreviewSessionResultSchema, } from "./artifacts.js";
14
14
  export { DeleteSkillBodySchema, DeleteSkillDispositionSchema, DeleteSkillPayloadSchema, DeleteSkillResponseSchema, GetSkillParamsSchema, GetSkillResponseSchema, GetSkillsResponseSchema, ImportSkillZipBodySchema, ImportSkillZipDispositionSchema, ImportSkillZipPayloadSchema, ImportSkillZipResponseSchema, ImportSkillZipResultSchema, SkillDetailProjectionSchema, SkillNameSchema, SkillProjectionSchema, } from "./skills.js";
15
15
  export { ActivityEventProjectionSchema, ActivityEventSsePayloadSchema, ApprovalChangedEventPayloadSchema, ActivityProjectionSchema, ConnectionReadyEventPayloadSchema, ExecutionActivitySummarySchema, ExecutionStatusChangedEventPayloadSchema, ExecutionStatusKindSchema, ExecutionStatusProjectionSchema, ProcedureLaneSchema, ProviderConfigChangedEventPayloadSchema, QueryInvalidateEventPayloadSchema, ScratchpadUpdatedEventPayloadSchema, TaskDetailUpdatedEventPayloadSchema, TaskUpdatedEventPayloadSchema, WorklistChangedEventPayloadSchema, WorkspaceRecoveredEventPayloadSchema, } from "./runtime-events.js";
16
16
  export { ContextSyncBodySchema, ContextSyncDispositionSchema, ContextSyncPayloadSchema, ContextSyncResponseSchema, ContextSyncResultSchema, InitializeProjectDocsBodySchema, InitializeProjectDocsDispositionSchema, InitializeProjectDocsPayloadSchema, InitializeProjectDocsResponseSchema, InitializeProjectDocsResultSchema, ProjectDocsProcedureStartResultSchema, RefreshScratchpadDispositionSchema, RefreshScratchpadResultSchema, RunSchedulerNowBodySchema, RunSchedulerNowDispositionSchema, RunSchedulerNowPayloadSchema, RunSchedulerNowResponseSchema, SubmitWorklistBodySchema, SubmitWorklistDispositionSchema, SubmitWorklistPayloadSchema, SubmitWorklistResponseSchema, SubmitWorklistResultSchema, UpdateProjectDescriptionBodySchema, UpdateProjectDescriptionDispositionSchema, UpdateProjectDescriptionPayloadSchema, UpdateProjectDescriptionResponseSchema, UpdateProjectDescriptionResultSchema, UpdateProjectDisplayNameBodySchema, UpdateProjectDisplayNameDispositionSchema, UpdateProjectDisplayNamePayloadSchema, UpdateProjectDisplayNameResponseSchema, UpdateProjectDisplayNameResultSchema, } from "./workspace-commands.js";
@@ -11,7 +11,7 @@ import type { CheckSkipReasonCodeSchema, ExternalSideEffectSummaryProjectionSche
11
11
  import type { ActiveApprovalProjectionSchema, ApprovalCommandProjectionSchema, ApprovalDecisionKindSchema, ApprovalDecisionOptionProjectionSchema, ApprovalFileChangeProjectionSchema, ApprovalPermissionsProjectionSchema, ApprovalRequestKindSchema, ApprovalRequestProjectionSchema, ApprovalResolutionOutcomeSchema, ApprovalResolutionProjectionSchema, DecideApprovalDispositionSchema, DecideApprovalPayloadSchema, DecideApprovalResultSchema } from "./approvals.js";
12
12
  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";
13
13
  import type { GetProjectDocRequestSchema, GetProjectDocResponseSchema, GetProjectDocsResponseSchema, GetReferenceFilesRequestSchema, GetReferenceFilesResponseSchema, GetViewerAssetRequestSchema, GetViewerFileRequestSchema, GetViewerFileResponseSchema, GetViewerTreeRequestSchema, GetViewerTreeResponseSchema, ProjectDocKeySchema, ProjectDocParamsSchema, ProjectDocSummaryProjectionSchema, ReferenceDirectoryProjectionSchema, ReferenceFileProjectionSchema, ReferenceSummaryProjectionSchema, ReferenceTextReadBlockedReasonSchema, RefreshReferenceSummariesDispositionSchema, RefreshReferenceSummariesPayloadSchema, RefreshReferenceSummariesResultSchema, UploadReferenceFileDispositionSchema, UploadReferenceFilePayloadSchema, UploadReferenceFileResultSchema, ViewerAssetVariantSchema, ViewerFileContentProjectionSchema, ViewerFileProjectionSchema, ViewerPathSchema, ViewerRepoSnapshotSchema, ViewerTreeEntryProjectionSchema, ViewerTreeTextReadBlockedReasonSchema, ViewerUnreadableReasonSchema } from "./viewer-reference.js";
14
- import type { ArtifactKindSchema, ArtifactManifestPathSchema, ArtifactManifestSchema, ArtifactPreviewCommandPayloadSchema, ArtifactPreviewCommandResultSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactProjectionSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, GetArtifactsResponseSchema, HeartbeatArtifactPreviewDispositionSchema, IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionPayloadSchema, IssueArtifactPreviewSessionResultSchema, StartArtifactPreviewDispositionSchema, StopArtifactPreviewDispositionSchema } from "./artifacts.js";
14
+ import type { ArtifactKindSchema, ArtifactManifestSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactProjectionSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, GetArtifactsResponseSchema, IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionPayloadSchema, IssueArtifactPreviewSessionResultSchema } from "./artifacts.js";
15
15
  import type { DeleteSkillDispositionSchema, DeleteSkillPayloadSchema, GetSkillParamsSchema, GetSkillResponseSchema, GetSkillsResponseSchema, ImportSkillZipDispositionSchema, ImportSkillZipPayloadSchema, ImportSkillZipResultSchema, SkillDetailProjectionSchema, SkillNameSchema, SkillProjectionSchema } from "./skills.js";
16
16
  import type { ActivityEventProjectionSchema, ActivityEventSsePayloadSchema, ApprovalChangedEventPayloadSchema, ActivityProjectionSchema, ConnectionReadyEventPayloadSchema, ExecutionActivitySummarySchema, ExecutionRuntimeActionSchema, ExecutionRuntimeSnapshotSchema, ExecutionRuntimeTokenUsageSchema, ExecutionStatusChangedEventPayloadSchema, ExecutionStatusKindSchema, ExecutionStatusProjectionSchema, ProcedureLaneSchema, ProviderConfigChangedEventPayloadSchema, QueryInvalidateEventPayloadSchema, ScratchpadUpdatedEventPayloadSchema, TaskDetailUpdatedEventPayloadSchema, TaskUpdatedEventPayloadSchema, WorklistChangedEventPayloadSchema, WorkspaceRecoveredEventPayloadSchema } from "./runtime-events.js";
17
17
  import type { ContextSyncDispositionSchema, ContextSyncPayloadSchema, ContextSyncResultSchema, InitializeProjectDocsDispositionSchema, InitializeProjectDocsPayloadSchema, InitializeProjectDocsResultSchema, RefreshScratchpadDispositionSchema, RefreshScratchpadResultSchema, RunSchedulerNowDispositionSchema, RunSchedulerNowPayloadSchema, SubmitWorklistDispositionSchema, SubmitWorklistPayloadSchema, SubmitWorklistResultSchema, UpdateProjectDescriptionDispositionSchema, UpdateProjectDescriptionPayloadSchema, UpdateProjectDescriptionResultSchema, UpdateProjectDisplayNameDispositionSchema, UpdateProjectDisplayNamePayloadSchema, UpdateProjectDisplayNameResultSchema } from "./workspace-commands.js";
@@ -202,7 +202,6 @@ export type DeleteSkillPayload = Static<typeof DeleteSkillPayloadSchema>;
202
202
  export type DeleteSkillDisposition = Static<typeof DeleteSkillDispositionSchema>;
203
203
  export type DeleteSkillResponse = CommandResponse<DeleteSkillDisposition>;
204
204
  export type ArtifactKind = Static<typeof ArtifactKindSchema>;
205
- export type ArtifactManifestPath = Static<typeof ArtifactManifestPathSchema>;
206
205
  export type ArtifactStaticManifest = Static<typeof ArtifactStaticManifestSchema>;
207
206
  export type ArtifactServerManifest = Static<typeof ArtifactServerManifestSchema>;
208
207
  export type ArtifactManifest = Static<typeof ArtifactManifestSchema>;
@@ -215,14 +214,6 @@ export type IssueArtifactPreviewSessionPayload = Static<typeof IssueArtifactPrev
215
214
  export type IssueArtifactPreviewSessionDisposition = Static<typeof IssueArtifactPreviewSessionDispositionSchema>;
216
215
  export type IssueArtifactPreviewSessionResult = Static<typeof IssueArtifactPreviewSessionResultSchema>;
217
216
  export type IssueArtifactPreviewSessionResponse = CommandResponse<IssueArtifactPreviewSessionDisposition, IssueArtifactPreviewSessionResult>;
218
- export type ArtifactPreviewCommandPayload = Static<typeof ArtifactPreviewCommandPayloadSchema>;
219
- export type StartArtifactPreviewDisposition = Static<typeof StartArtifactPreviewDispositionSchema>;
220
- export type HeartbeatArtifactPreviewDisposition = Static<typeof HeartbeatArtifactPreviewDispositionSchema>;
221
- export type StopArtifactPreviewDisposition = Static<typeof StopArtifactPreviewDispositionSchema>;
222
- export type ArtifactPreviewCommandResult = Static<typeof ArtifactPreviewCommandResultSchema>;
223
- export type StartArtifactPreviewResponse = CommandResponse<StartArtifactPreviewDisposition, ArtifactPreviewCommandResult>;
224
- export type HeartbeatArtifactPreviewResponse = CommandResponse<HeartbeatArtifactPreviewDisposition, ArtifactPreviewCommandResult>;
225
- export type StopArtifactPreviewResponse = CommandResponse<StopArtifactPreviewDisposition, ArtifactPreviewCommandResult>;
226
217
  export type RunSchedulerNowPayload = Static<typeof RunSchedulerNowPayloadSchema>;
227
218
  export type RunSchedulerNowDisposition = Static<typeof RunSchedulerNowDispositionSchema>;
228
219
  export type RunSchedulerNowResponse = CommandResponse<RunSchedulerNowDisposition>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xfey/tutti",
3
- "version": "0.1.52",
3
+ "version": "0.1.54",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -27,7 +27,7 @@ Provider validation 也使用 OpenAI Responses API,但它只是启动前 crede
27
27
  - `workspace_write_run`:已对齐为 workspace-write + 精简 task contract 输入 + Project Docs / Worklist skills + user skills;存在 user skills 时通过 `skills/list.perCwdExtraUserRoots` 预热当前项目 `<TUTTI_HOME>/projects/<project_id>/skills`;Reference Files 不再通过 built-in skill 暴露,若任务或项目文档指向 `docs/reference/` 中资料,Codex 可直接读取相关 repo 文件。
28
28
  - `follow_up_run`:已对齐为 workspace-write + 精简 task contract 输入 + continuation block + Project Docs / Worklist skills + user skills;存在 user skills 时同样预热当前项目 `<TUTTI_HOME>/projects/<project_id>/skills` extra root;Reference Files 不再通过 built-in skill 暴露,若任务、项目文档或 clarification answer 指向 `docs/reference/` 中资料,Codex 可直接读取相关 repo 文件。
29
29
  - `artifact_applicability`:候选缺少 manifest 且 deterministic evidence 无法明确判定时,使用 `artifacts/applicability.md` 做 transient read-only structured-output 判断;判断不写入 Task contract,失败时 fail closed。
30
- - `pipeline_self_correction`:已对齐为 workspace-write + 精简 task contract 输入 + 必填 correction diagnostic;使用 `runs/task-retry.md` 和 `workspace_write_run` selection,在同一 active Run 记录终态前处理 Artifact gate、no candidate diff、checks 失败或 checks 修改候选等可自纠 feedback,并在同一持久 project workspace 中保留前一 attempt 的 source 与 repo-local runtime state。
30
+ - `pipeline_self_correction`:已对齐为 workspace-write + 精简 task contract 输入 + 必填 correction diagnostic;使用 `runs/task-retry.md` 和 `workspace_write_run` selection,在同一 active Run 记录终态前处理 Artifact gate、checks 前后无 candidate diff、checks 失败或 accepted-checkpoint failure 等可自纠 feedback,并在同一持久 project workspace 中保留前一 attempt 的 source 与 repo-local runtime state。
31
31
  - `follow_up_check`:保持 OpenAI SDK structured output;已收敛为只判断上游 `Run.needs_human` 的 task-bound answer,不接入 skill,不重查代码或协作上下文;provider-facing input 只保留精简 task contract、previous Run pause reason、原 clarification request 和 answers,provider raw output 使用 `{ result: ... }` 互斥分支,failed-task retry 从 active path 移除。
32
32
  - `reference_summary_refresh`:已对齐为 Codex app-server read-only + 单文件临时 `cwd`;workflow / activity refs、原始 path、blob、media type 和 file metadata 只留在 Control Plane 内部,不进入 prompt;provider raw output 使用 `{ result: ... }` 互斥分支,只输出 `summarized.summary` 或 `unavailable.reason`。
33
33
 
@@ -413,15 +413,15 @@ provider transient retry:continuation 的 retryable app-server failure 只在
413
413
 
414
414
  当前状态:active pipeline-internal path。它不等于 task-bound follow-up retry;`Run.failed` / `Task.failed` 当前仍不通过 follow-up retry 复活。如果最终失败后仍需要继续,应由用户在主群聊补充上下文或调整方向,随后重新走 Scratchpad -> Worklist 创建新任务。
415
415
 
416
- 触发条件:当前覆盖无候选 diff、可自纠 Artifact candidate failure、checks 失败,以及 checks 修改 Git-visible candidate source
416
+ 触发条件:当前覆盖checks前后无候选diff、可自纠Artifact candidate failure、checks失败,以及accepted-checkpoint failure
417
417
 
418
418
  当前输入:
419
419
 
420
420
  - `run_input_json.title` / `goal` / `scope`:同一 frozen task contract。
421
421
  - `run_input_json.correction.summary`:上一 attempt 的 bounded failure summary。
422
- - `run_input_json.correction.reason_code`:Run pipeline 生成的 feedback 短码,来源包括 Artifact gate、no candidate diff、checks 失败或 checks 修改候选。
422
+ - `run_input_json.correction.reason_code`:Run pipeline 生成的 feedback 短码,来源包括 Artifact gate、checks 前后无 candidate diff、checks 失败或 accepted-checkpoint failure。
423
423
  - `run_input_json.correction.guidance`:Run pipeline 根据 feedback reason 生成的本次 retry 直接修正目标。
424
- - `run_input_json.correction.diagnostic`:必填的 redacted / bounded 原始失败文本,包含 `source / text / truncated`,用于让模型看到 parser、package、preview process、probe 或 candidate diff 的直接诊断。
424
+ - `run_input_json.correction.diagnostic`:必填的 redacted / bounded 原始失败文本,包含 `source / text / truncated`,用于让模型看到 parser、package、preview process、probe 或 pipeline state 的直接诊断。
425
425
  - `run_input_json.correction.promotion_failure`:当前可自纠 feedback 都发生在 accepted checkpoint 前,因此显式为 `null`;对象分支仅作为 bounded schema 兼容位,不表示当前存在 promotion reconcile 路径。
426
426
  - 不传入 `context_entry_json`、task id、task summary、workflow / activity refs、Run lineage、dispatch context 或 project workspace 绝对路径。
427
427
  - 通过 `workspace_write_run` selection 可读取 Project Docs 与 Worklist,并可加载所有 enabled user skills;存在 user skills 时,app-server `skills/list` 会先收到当前项目 `<TUTTI_HOME>/projects/<project_id>/skills` extra user root。
@@ -4,7 +4,7 @@ These templates are used by task `Run` execution.
4
4
 
5
5
  - `task-run.md` is rendered for initial task Runs.
6
6
  - `task-continuation.md` is rendered for Phase 8 continuation Runs after task-bound clarification.
7
- - `task-retry.md` is rendered for bounded Run pipeline self-correction retries after feedback such as no candidate diff, Artifact validation failure, failed checks, source mutation, or accepted-checkpoint failure. It is not a failed-task follow-up path and does not resurrect `Task.failed`.
7
+ - `task-retry.md` is rendered for bounded Run pipeline self-correction retries after feedback such as no candidate diff before or after checks, Artifact validation failure, failed checks, or accepted-checkpoint failure. It is not a failed-task follow-up path and does not resurrect `Task.failed`.
8
8
  Templates in this directory may describe task contracts, repo evidence, check expectations, artifact declaration rules, and documentation update responsibilities. They must never include provider credentials or host-local secret material.
9
9
 
10
10
  `task-run.md` allows `needs_human` only for human requirement decisions, non-secret context, or risk confirmation. Unusable candidates, ordinary missing diffs, or repo/tooling errors that prevent implementation should be returned as `failed` so the Run does not open task-bound clarification incorrectly. If the task contract does not require repository file changes, the output can use `completed_no_repo_changes`; otherwise a completed implementation is expected to produce a candidate diff. If the candidate is complete but Codex self-validation commands are unavailable or blocked, the task-run output should still be `completed`; Tutti checks are the authoritative validation gate.
@@ -14,6 +14,7 @@ Run templates describe `docs/reference/` as a user-visible file exchange area. H
14
14
  Initial `task-run.md`, active `task-continuation.md`, and active pipeline `task-retry.md` also instruct Codex to write or update the single active `tutti.artifact.json` manifest only when the task creates or updates a member-viewable visual artifact. Each template includes the complete strict static and server JSON shapes: every behavior field is required, `network` is always an explicit boolean, and server `script / ready_path / port` fields are forbidden. A server package instead declares the fixed `artifact:preview` npm script in its own `package.json` and listens on the injected `HOST / PORT`. The manifest remains repo truth and is not reported through the structured output schema.
15
15
  Active task-bound follow-up still only starts continuation Runs from `Run.needs_human`. Pipeline self-correction retry happens before a terminal Run result is recorded and does not open clarification.
16
16
  All three templates state that cwd is the persistent project workspace, may contain unaccepted source and project-local runtime/dependency state from earlier failed attempts, and must not be reset, checked out, stashed, cleaned, or otherwise discarded. Continuation, provider transient retry, and self-correction reuse that same directory and accumulated state.
17
+ All three templates require a final Git status inspection and make the Agent responsible for maintaining the repository's own `.gitignore` according to project conventions. They do not prescribe runtime path names or force intentional generated source out of Git.
17
18
 
18
19
  Provider transient retry is separate from self-correction. If a retryable Codex app-server workspace-write failure occurs before usable structured output, Run pipeline may rerun the same prompt family once in the same project workspace: initial Runs stay on `task-run.md`, continuation Runs stay on `task-continuation.md`, and self-correction attempts stay on `task-retry.md`. This retry does not add `RunCorrectionContext` unless the failed attempt was already a self-correction attempt.
19
20
  Run templates are responsible for telling Codex to update related project documentation in the same candidate workspace whenever implementation changes stable project facts. Broader cleanup, fact reconciliation, and phase-level documentation maintenance belong to the independent `context_sync` Procedure.
@@ -45,6 +45,7 @@ Human clarification answers may clarify or confirm work inside the frozen task c
45
45
  - Work only inside the provided project workspace.
46
46
  - This workspace is the persistent development state. It may retain unaccepted source changes and project-local dependency or runtime state from the paused or failed work; inspect and continue from that state within the frozen task contract.
47
47
  - Do not reset, checkout, stash, clean, or otherwise discard existing workspace state. Do not remove changes merely because they were created before this continuation.
48
+ - Before returning, inspect the final Git status. Maintain the repository's own `.gitignore` for project-local state that should not be versioned, following existing project conventions; keep files Git-visible when they are intentional versioned source. Do not assume fixed runtime path names.
48
49
  - Prefer small, reviewable changes that preserve existing style and tests.
49
50
 
50
51
  If the formal task contract plus submitted clarification is still insufficient, return `needs_human` only for a human requirement decision, non-secret context, or risk confirmation. Return `failed` when no usable candidate can be produced.
@@ -30,10 +30,10 @@ Fields:
30
30
  Use `correction` to understand why the previous attempt could not pass the acceptance gates and what this retry must fix.
31
31
 
32
32
  - `summary`: short human-readable summary of the previous attempt failure.
33
- - `reason_code`: machine-generated pipeline feedback code. Current sources include Artifact candidate validation, no candidate diff, failed checks, checks that modified tracked candidate files, and accepted-checkpoint failures. This code is assigned by Tutti Run pipeline, not by the model.
33
+ - `reason_code`: machine-generated pipeline feedback code. Current sources include Artifact candidate validation, no candidate diff before or after checks, failed checks, and accepted-checkpoint failures. This code is assigned by Tutti Run pipeline, not by the model.
34
34
  - `guidance`: direct retry instruction generated by Tutti Run pipeline for the feedback reason.
35
35
  - `diagnostic`: required bounded diagnostic from the failed gate.
36
- - `source`: stable diagnostic source such as `manifest_parser`, `package_json`, `preview_process`, `ready_probe`, `candidate_diff`, or `pipeline`.
36
+ - `source`: stable diagnostic source such as `manifest_parser`, `package_json`, `preview_process`, `ready_probe`, or `pipeline`.
37
37
  - `text`: redacted original parser, process, probe, diff, or pipeline error text. Use it to fix the concrete failure; do not copy it into user-facing output or project docs.
38
38
  - `truncated`: whether Tutti had to bound the original diagnostic.
39
39
  - `promotion_failure`: accepted-checkpoint failure details, or explicit `null` when checkpoint creation was not reached.
@@ -53,6 +53,7 @@ Correct the existing candidate in place, using `correction.summary`, `correction
53
53
  - Do not use main chat or Scratchpad as hidden scope.
54
54
  - Work only inside the provided project workspace.
55
55
  - Do not reset, checkout, stash, clean, or otherwise discard the previous attempt's source, dependency, or runtime state. Remove or replace existing changes only when that is directly required to correct the candidate within the frozen task contract.
56
+ - Before returning, inspect the final Git status. Maintain the repository's own `.gitignore` for project-local state that should not be versioned, following existing project conventions; keep files Git-visible when they are intentional versioned source. Do not assume fixed runtime path names.
56
57
  - Prefer small, reviewable changes that preserve existing style and tests.
57
58
 
58
59
  Human clarification is not available as an interactive step inside this retry. If the formal task contract itself is insufficient, return `needs_human` with one concrete, non-secret question. Return `failed` when no usable candidate can be produced.
@@ -32,6 +32,7 @@ Fields:
32
32
  - Work only inside the provided project workspace.
33
33
  - This workspace is the persistent development state. It may already contain unaccepted source changes or project-local dependency and runtime state left by an earlier failed Run; inspect and continue from that state when it is relevant to the frozen task contract.
34
34
  - Do not reset, checkout, stash, clean, or otherwise discard existing workspace state. Do not remove changes merely because they predate this Run or are not part of the immediate fix.
35
+ - Before returning, inspect the final Git status. Maintain the repository's own `.gitignore` for project-local state that should not be versioned, following existing project conventions; keep files Git-visible when they are intentional versioned source. Do not assume fixed runtime path names.
35
36
  - Prefer small, reviewable changes that preserve existing style and tests.
36
37
 
37
38
  If the formal task contract is insufficient, return `needs_human` only for a human requirement decision, non-secret context, or risk confirmation. Return `failed` when no usable candidate can be produced.
@@ -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-DK8LBgHp.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:`Execution progress`})]})}),(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)}}if(e>=33.45&&e<35.95){let t={x:87.27,y:66.35},n={x:88.95,y:66.35},r={x:90.64,y:66.35},i;return i=e<34.15?V(e,33.45,34.15,{x:4,y:22.85},t):e<34.78?V(e,34.5,34.78,t,n):e<35.45?V(e,35.15,35.45,n,r):r,{visible:!0,x:i.x,y:i.y,clickPulse:Math.max(H(e,34.15,34.4),H(e,34.78,35.03),H(e,35.45,35.7))}}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-CM41hrQd.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:`Execution progress`})]})}),(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)}}if(e>=33.45&&e<35.95){let t={x:87.27,y:66.35},n={x:88.95,y:66.35},r={x:90.64,y:66.35},i;return i=e<34.15?V(e,33.45,34.15,{x:4,y:22.85},t):e<34.78?V(e,34.5,34.78,t,n):e<35.45?V(e,35.15,35.45,n,r):r,{visible:!0,x:i.x,y:i.y,clickPulse:Math.max(H(e,34.15,34.4),H(e,34.78,35.03),H(e,35.45,35.7))}}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};