@xfey/tutti 0.1.94 → 0.1.95

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 (66) hide show
  1. package/dist/collaboration-state/index.d.ts +2 -0
  2. package/dist/collaboration-state/index.js +1 -0
  3. package/dist/collaboration-state/messages.js +15 -0
  4. package/dist/collaboration-state/run-recording.js +18 -1
  5. package/dist/collaboration-state/run-results.js +6 -0
  6. package/dist/collaboration-state/task-retry.d.ts +16 -0
  7. package/dist/collaboration-state/task-retry.js +134 -0
  8. package/dist/control-plane/command-recovery.js +9 -1
  9. package/dist/control-plane/index.d.ts +3 -2
  10. package/dist/control-plane/index.js +14 -0
  11. package/dist/control-plane/run-retry.d.ts +19 -0
  12. package/dist/control-plane/run-retry.js +103 -0
  13. package/dist/control-plane/run-start.d.ts +2 -1
  14. package/dist/control-plane/run-start.js +3 -0
  15. package/dist/control-plane/types.d.ts +12 -0
  16. package/dist/control-plane/workflows/openai.d.ts +1 -0
  17. package/dist/control-plane/workflows/openai.js +86 -15
  18. package/dist/control-plane/worklist-terminal-feedback.js +3 -0
  19. package/dist/prompt-templates/index.d.ts +1 -1
  20. package/dist/prompt-templates/index.js +4 -3
  21. package/dist/providers/openai/app-server/durable-session-smoke-cli.d.ts +2 -0
  22. package/dist/providers/openai/app-server/durable-session-smoke-cli.js +229 -0
  23. package/dist/providers/openai/app-server/read-only-procedure.d.ts +10 -0
  24. package/dist/providers/openai/app-server/read-only-procedure.js +42 -13
  25. package/dist/providers/openai/app-server/session-store.d.ts +74 -0
  26. package/dist/providers/openai/app-server/session-store.js +305 -0
  27. package/dist/providers/openai/app-server/workspace-write-run.d.ts +17 -4
  28. package/dist/providers/openai/app-server/workspace-write-run.js +92 -28
  29. package/dist/providers/openai/codex-app-server.d.ts +1 -0
  30. package/dist/providers/openai/codex-app-server.js +2 -0
  31. package/dist/run-pipeline/openai.d.ts +1 -0
  32. package/dist/run-pipeline/openai.js +15 -43
  33. package/dist/run-pipeline/task-run-invocation.js +354 -93
  34. package/dist/server-shell/http/routes/project-api/execution-routes.js +32 -2
  35. package/dist/server-shell/http/routes/project-api/invalidations.d.ts +2 -1
  36. package/dist/server-shell/http/routes/project-api/invalidations.js +13 -0
  37. package/dist/server-shell/http/routes/project-api/openapi-execution-routes.d.ts +21 -0
  38. package/dist/server-shell/http/routes/project-api/openapi-execution-routes.js +12 -1
  39. package/dist/server-shell/http/routes/project-api/openapi.d.ts +7 -0
  40. package/node_modules/@tutti/shared/dist/schemas/api/clarifications.d.ts +1 -0
  41. package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +1 -1
  42. package/node_modules/@tutti/shared/dist/schemas/api/index.js +1 -1
  43. package/node_modules/@tutti/shared/dist/schemas/api/messages.d.ts +5 -0
  44. package/node_modules/@tutti/shared/dist/schemas/api/messages.js +1 -0
  45. package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.d.ts +1 -0
  46. package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +4 -1
  47. package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.d.ts +1 -0
  48. package/node_modules/@tutti/shared/dist/schemas/api/work-items.d.ts +4 -0
  49. package/node_modules/@tutti/shared/dist/schemas/api/work-items.js +3 -0
  50. package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.d.ts +33 -0
  51. package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.js +35 -1
  52. package/package.json +1 -1
  53. package/prompts/runs/README.md +11 -16
  54. package/prompts/runs/task-execute.md +86 -0
  55. package/prompts/runs/task-finalize.md +11 -0
  56. package/prompts/runs/task-recovery.md +15 -0
  57. package/prompts/runs/task-result-contract.md +64 -0
  58. package/web/assets/{homepage-motion-scene-CLTkixIk.js → homepage-motion-scene-BFo4r4nz.js} +1 -1
  59. package/web/assets/index-CNIl4TF8.js +69 -0
  60. package/web/assets/index-quWLFJgD.css +1 -0
  61. package/web/index.html +2 -2
  62. package/prompts/runs/task-continuation.md +0 -201
  63. package/prompts/runs/task-retry.md +0 -209
  64. package/prompts/runs/task-run.md +0 -188
  65. package/web/assets/index-BTNYElB-.js +0 -69
  66. package/web/assets/index-Deu_eF5K.css +0 -1
@@ -1,9 +1,11 @@
1
- import { CursorPageRequestSchema, ExecutionStatusProjectionSchema, GetRecoverySummariesRequestSchema, GetRecoverySummariesResponseSchema, GetRecoverySummaryResponseSchema, TaskDetailProjectionSchema, TaskProjectionSchema, TaskRunResultsPageSchema, } from "@tutti/shared/schemas/api";
1
+ import { CursorPageRequestSchema, ExecutionStatusProjectionSchema, GetRecoverySummariesRequestSchema, GetRecoverySummariesResponseSchema, GetRecoverySummaryResponseSchema, TaskDetailProjectionSchema, TaskProjectionSchema, TaskRunResultsPageSchema, RetryTaskBodySchema, RetryTaskResponseSchema, } from "@tutti/shared/schemas/api";
2
2
  import { createIdleExecutionStatusProjection, readRecoverySummariesPage, readRecoverySummaryProjection, readTaskDetailProjection, readTaskProjection, readTaskRunResultsPage, } from "../../../../collaboration-state/index.js";
3
+ import { executeIdempotentCommand } from "../../../command-idempotency/index.js";
3
4
  import { HOST_PROJECT_API_BASE_PATH } from "./constants.js";
4
5
  import { HostProjectNotFoundError } from "./errors.js";
5
6
  import { RecoverySummaryParamsSchema, TaskParamsSchema, } from "./schemas.js";
6
- import { requireHostProjectSession, requireProjectStore, } from "./session-requirements.js";
7
+ import { requireControlPlane, requireHostProjectSession, requireProjectStore, } from "./session-requirements.js";
8
+ import { taskRetryInvalidates } from "./invalidations.js";
7
9
  export function registerExecutionRoutes(app, options) {
8
10
  app.get(`${HOST_PROJECT_API_BASE_PATH}/tasks/:taskId/detail`, {
9
11
  schema: {
@@ -36,6 +38,34 @@ export function registerExecutionRoutes(app, options) {
36
38
  }
37
39
  return page;
38
40
  });
41
+ app.post(`${HOST_PROJECT_API_BASE_PATH}/tasks/:taskId/retry`, {
42
+ schema: {
43
+ params: TaskParamsSchema,
44
+ body: RetryTaskBodySchema,
45
+ response: { 200: RetryTaskResponseSchema },
46
+ },
47
+ }, (request) => {
48
+ requireHostProjectSession(request, options);
49
+ const store = requireProjectStore(options);
50
+ const controlPlane = requireControlPlane(options);
51
+ const execution = executeIdempotentCommand({
52
+ db: store.db,
53
+ command_id: request.body.command_id,
54
+ command_name: "task.retry",
55
+ target_ref: request.body.payload.expected_latest_run_result_id,
56
+ payload: {
57
+ task_id: request.params.taskId,
58
+ ...request.body.payload,
59
+ },
60
+ ...(options.now === undefined ? {} : { now: options.now }),
61
+ execute: () => controlPlane.retryTask(request.params.taskId, request.body.payload),
62
+ });
63
+ return {
64
+ command_id: execution.command_id,
65
+ disposition: execution.disposition,
66
+ invalidates: taskRetryInvalidates(request.params.taskId),
67
+ };
68
+ });
39
69
  app.get(`${HOST_PROJECT_API_BASE_PATH}/recovery-summaries`, {
40
70
  schema: {
41
71
  querystring: GetRecoverySummariesRequestSchema,
@@ -1,8 +1,9 @@
1
- import type { ClarificationRoundRef } from "@tutti/shared/ids";
1
+ import type { ClarificationRoundRef, TaskId } from "@tutti/shared/ids";
2
2
  import type { QueryInvalidationHint, RunSchedulerNowDisposition } from "@tutti/shared/schemas/api";
3
3
  export declare function mainChatMessageInvalidates(): QueryInvalidationHint[];
4
4
  export declare function worklistSubmitInvalidates(): QueryInvalidationHint[];
5
5
  export declare function schedulerRunNowInvalidates(disposition: RunSchedulerNowDisposition): QueryInvalidationHint[];
6
+ export declare function taskRetryInvalidates(taskId: TaskId): QueryInvalidationHint[];
6
7
  export declare function clarificationRoundInvalidates(roundId: ClarificationRoundRef): QueryInvalidationHint[];
7
8
  export declare function approvalInvalidates(): QueryInvalidationHint[];
8
9
  export declare function readStateInvalidates(): QueryInvalidationHint[];
@@ -31,6 +31,19 @@ export function schedulerRunNowInvalidates(disposition) {
31
31
  { kind: "task_run_results", task_id: disposition.task_id },
32
32
  ];
33
33
  }
34
+ export function taskRetryInvalidates(taskId) {
35
+ return [
36
+ { kind: "worklist" },
37
+ { kind: "task", task_id: taskId },
38
+ { kind: "task_detail", task_id: taskId },
39
+ { kind: "task_run_results", task_id: taskId },
40
+ { kind: "execution_status" },
41
+ { kind: "messages", scope: "main_chat" },
42
+ { kind: "project_timeline" },
43
+ { kind: "read_state" },
44
+ { kind: "bootstrap" },
45
+ ];
46
+ }
34
47
  export function clarificationRoundInvalidates(roundId) {
35
48
  return [
36
49
  { kind: "clarification", round_id: roundId },
@@ -24,6 +24,7 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
24
24
  };
25
25
  };
26
26
  querystring?: never;
27
+ requestBody?: never;
27
28
  } | {
28
29
  method: "get";
29
30
  path: string;
@@ -87,6 +88,7 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
87
88
  }>>;
88
89
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
89
90
  retryable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
91
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
90
92
  updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
91
93
  }>;
92
94
  frozen_contract_since_activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -96,6 +98,7 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
96
98
  };
97
99
  };
98
100
  querystring?: never;
101
+ requestBody?: never;
99
102
  } | {
100
103
  method: "get";
101
104
  path: string;
@@ -112,6 +115,21 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
112
115
  schema: import("@sinclair/typebox").TSchema;
113
116
  };
114
117
  };
118
+ requestBody?: never;
119
+ } | {
120
+ method: "post";
121
+ path: string;
122
+ summary: string;
123
+ tags: string[];
124
+ parameters: import("@tutti/shared/schemas/api").BrowserFacingOpenApiParameter[];
125
+ requestBody: import("@sinclair/typebox").TSchema;
126
+ responses: {
127
+ 200: {
128
+ description: string;
129
+ schema: import("@sinclair/typebox").TSchema;
130
+ };
131
+ };
132
+ querystring?: never;
115
133
  } | {
116
134
  method: "get";
117
135
  path: string;
@@ -128,6 +146,7 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
128
146
  };
129
147
  };
130
148
  parameters?: never;
149
+ requestBody?: never;
131
150
  } | {
132
151
  method: "get";
133
152
  path: string;
@@ -149,6 +168,7 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
149
168
  };
150
169
  };
151
170
  querystring?: never;
171
+ requestBody?: never;
152
172
  } | {
153
173
  method: "get";
154
174
  path: string;
@@ -228,5 +248,6 @@ export declare const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES: ({
228
248
  };
229
249
  parameters?: never;
230
250
  querystring?: never;
251
+ requestBody?: never;
231
252
  })[];
232
253
  //# sourceMappingURL=openapi-execution-routes.d.ts.map
@@ -1,4 +1,4 @@
1
- import { CursorPageRequestSchema, ExecutionStatusProjectionSchema, GetRecoverySummariesRequestSchema, GetRecoverySummariesResponseSchema, GetRecoverySummaryResponseSchema, TaskDetailProjectionSchema, TaskProjectionSchema, TaskRunResultsPageSchema, } from "@tutti/shared/schemas/api";
1
+ import { CursorPageRequestSchema, ExecutionStatusProjectionSchema, GetRecoverySummariesRequestSchema, GetRecoverySummariesResponseSchema, GetRecoverySummaryResponseSchema, RetryTaskBodySchema, RetryTaskResponseSchema, TaskDetailProjectionSchema, TaskProjectionSchema, TaskRunResultsPageSchema, } from "@tutti/shared/schemas/api";
2
2
  import { HOST_PROJECT_API_BASE_PATH } from "./constants.js";
3
3
  import { RecoverySummaryIdPathParameter, TaskIdPathParameter, } from "./openapi-path-parameters.js";
4
4
  export const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES = [
@@ -33,6 +33,17 @@ export const HOST_PROJECT_EXECUTION_OPENAPI_ROUTES = [
33
33
  200: { description: "Task run result history page.", schema: TaskRunResultsPageSchema },
34
34
  },
35
35
  },
36
+ {
37
+ method: "post",
38
+ path: `${HOST_PROJECT_API_BASE_PATH}/tasks/{task_id}/retry`,
39
+ summary: "Retry the latest safely recoverable terminal failed task result.",
40
+ tags: ["tasks"],
41
+ parameters: [TaskIdPathParameter],
42
+ requestBody: RetryTaskBodySchema,
43
+ responses: {
44
+ 200: { description: "Task Retry command response.", schema: RetryTaskResponseSchema },
45
+ },
46
+ },
36
47
  {
37
48
  method: "get",
38
49
  path: `${HOST_PROJECT_API_BASE_PATH}/recovery-summaries`,
@@ -653,6 +653,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
653
653
  };
654
654
  };
655
655
  querystring?: never;
656
+ requestBody?: never;
656
657
  } | {
657
658
  method: "get";
658
659
  path: string;
@@ -716,6 +717,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
716
717
  }>>;
717
718
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
718
719
  retryable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
720
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
719
721
  updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
720
722
  }>;
721
723
  frozen_contract_since_activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -725,6 +727,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
725
727
  };
726
728
  };
727
729
  querystring?: never;
730
+ requestBody?: never;
728
731
  } | {
729
732
  method: "get";
730
733
  path: string;
@@ -741,6 +744,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
741
744
  schema: import("@sinclair/typebox").TSchema;
742
745
  };
743
746
  };
747
+ requestBody?: never;
744
748
  } | {
745
749
  method: "get";
746
750
  path: string;
@@ -757,6 +761,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
757
761
  };
758
762
  };
759
763
  parameters?: never;
764
+ requestBody?: never;
760
765
  } | {
761
766
  method: "get";
762
767
  path: string;
@@ -778,6 +783,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
778
783
  };
779
784
  };
780
785
  querystring?: never;
786
+ requestBody?: never;
781
787
  } | {
782
788
  method: "get";
783
789
  path: string;
@@ -857,6 +863,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
857
863
  };
858
864
  parameters?: never;
859
865
  querystring?: never;
866
+ requestBody?: never;
860
867
  } | {
861
868
  method: "get";
862
869
  path: string;
@@ -589,6 +589,7 @@ export declare const SendClarificationRoundMessageResultSchema: import("@sinclai
589
589
  media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
590
590
  }>>>;
591
591
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
592
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
592
593
  }>>;
593
594
  artifact_preview: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
594
595
  kind: import("@sinclair/typebox").TLiteral<"artifact_preview">;
@@ -16,5 +16,5 @@ export { GetProjectDocRequestSchema, GetProjectDocResponseSchema, GetProjectDocs
16
16
  export { ArtifactKindSchema, ArtifactManifestSchema, ArtifactPreviewProjectionSchema, ArtifactPreviewStatusSchema, ArtifactServerManifestSchema, ArtifactStaticManifestSchema, ArtifactSummaryProjectionSchema, ArtifactTitleSchema, ArtifactProjectionSchema, GetArtifactsResponseSchema, IssueArtifactPreviewSessionBodySchema, IssueArtifactPreviewSessionDispositionSchema, IssueArtifactPreviewSessionPayloadSchema, IssueArtifactPreviewSessionResponseSchema, IssueArtifactPreviewSessionResultSchema, } from "./artifacts.js";
17
17
  export { DeleteSkillBodySchema, DeleteSkillDispositionSchema, DeleteSkillPayloadSchema, DeleteSkillResponseSchema, GetSkillParamsSchema, GetSkillResponseSchema, GetSkillsResponseSchema, ImportSkillZipBodySchema, ImportSkillZipDispositionSchema, ImportSkillZipPayloadSchema, ImportSkillZipResponseSchema, ImportSkillZipResultSchema, SkillDetailProjectionSchema, SkillNameSchema, SkillProjectionSchema, } from "./skills.js";
18
18
  export { ActivityEventProjectionSchema, ActivityEventSsePayloadSchema, ApprovalChangedEventPayloadSchema, ActivityProjectionSchema, ConnectionReadyEventPayloadSchema, ExecutionActivitySummarySchema, ExecutionStatusChangedEventPayloadSchema, ExecutionStatusKindSchema, ExecutionStatusProjectionSchema, ProcedureLaneSchema, ProviderConfigChangedEventPayloadSchema, QueryInvalidateEventPayloadSchema, ScratchpadUpdatedEventPayloadSchema, TaskDetailUpdatedEventPayloadSchema, TaskUpdatedEventPayloadSchema, WorklistChangedEventPayloadSchema, WorkspaceRecoveredEventPayloadSchema, } from "./runtime-events.js";
19
- 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";
19
+ export { ContextSyncBodySchema, ContextSyncDispositionSchema, ContextSyncPayloadSchema, ContextSyncResponseSchema, ContextSyncResultSchema, InitializeProjectDocsBodySchema, InitializeProjectDocsDispositionSchema, InitializeProjectDocsPayloadSchema, InitializeProjectDocsResponseSchema, InitializeProjectDocsResultSchema, ProjectDocsProcedureStartResultSchema, RefreshScratchpadDispositionSchema, RefreshScratchpadResultSchema, RunSchedulerNowBodySchema, RunSchedulerNowDispositionSchema, RunSchedulerNowPayloadSchema, RunSchedulerNowResponseSchema, RetryTaskBodySchema, RetryTaskDispositionSchema, RetryTaskPayloadSchema, RetryTaskResponseSchema, SubmitWorklistBodySchema, SubmitWorklistDispositionSchema, SubmitWorklistPayloadSchema, SubmitWorklistResponseSchema, SubmitWorklistResultSchema, UpdateProjectDescriptionBodySchema, UpdateProjectDescriptionDispositionSchema, UpdateProjectDescriptionPayloadSchema, UpdateProjectDescriptionResponseSchema, UpdateProjectDescriptionResultSchema, UpdateProjectDisplayNameBodySchema, UpdateProjectDisplayNameDispositionSchema, UpdateProjectDisplayNamePayloadSchema, UpdateProjectDisplayNameResponseSchema, UpdateProjectDisplayNameResultSchema, } from "./workspace-commands.js";
20
20
  //# sourceMappingURL=index.d.ts.map
@@ -14,5 +14,5 @@ export { GetProjectDocRequestSchema, GetProjectDocResponseSchema, GetProjectDocs
14
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
- 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";
17
+ export { ContextSyncBodySchema, ContextSyncDispositionSchema, ContextSyncPayloadSchema, ContextSyncResponseSchema, ContextSyncResultSchema, InitializeProjectDocsBodySchema, InitializeProjectDocsDispositionSchema, InitializeProjectDocsPayloadSchema, InitializeProjectDocsResponseSchema, InitializeProjectDocsResultSchema, ProjectDocsProcedureStartResultSchema, RefreshScratchpadDispositionSchema, RefreshScratchpadResultSchema, RunSchedulerNowBodySchema, RunSchedulerNowDispositionSchema, RunSchedulerNowPayloadSchema, RunSchedulerNowResponseSchema, RetryTaskBodySchema, RetryTaskDispositionSchema, RetryTaskPayloadSchema, RetryTaskResponseSchema, SubmitWorklistBodySchema, SubmitWorklistDispositionSchema, SubmitWorklistPayloadSchema, SubmitWorklistResponseSchema, SubmitWorklistResultSchema, UpdateProjectDescriptionBodySchema, UpdateProjectDescriptionDispositionSchema, UpdateProjectDescriptionPayloadSchema, UpdateProjectDescriptionResponseSchema, UpdateProjectDescriptionResultSchema, UpdateProjectDisplayNameBodySchema, UpdateProjectDisplayNameDispositionSchema, UpdateProjectDisplayNamePayloadSchema, UpdateProjectDisplayNameResponseSchema, UpdateProjectDisplayNameResultSchema, } from "./workspace-commands.js";
18
18
  //# sourceMappingURL=index.js.map
@@ -109,6 +109,7 @@ export declare const TaskResultRefSchema: import("@sinclair/typebox").TObject<{
109
109
  media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
110
110
  }>>>;
111
111
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
112
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
112
113
  }>;
113
114
  export declare const WorklistCompileRefSchema: import("@sinclair/typebox").TObject<{
114
115
  kind: import("@sinclair/typebox").TLiteral<"worklist_compile">;
@@ -214,6 +215,7 @@ export declare const MessageRefsSchema: import("@sinclair/typebox").TObject<{
214
215
  media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
215
216
  }>>>;
216
217
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
218
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
217
219
  }>>;
218
220
  artifact_preview: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
219
221
  kind: import("@sinclair/typebox").TLiteral<"artifact_preview">;
@@ -331,6 +333,7 @@ export declare const MessageProjectionSchema: import("@sinclair/typebox").TObjec
331
333
  media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
332
334
  }>>>;
333
335
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
336
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
334
337
  }>>;
335
338
  artifact_preview: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
336
339
  kind: import("@sinclair/typebox").TLiteral<"artifact_preview">;
@@ -472,6 +475,7 @@ export declare const SendMainChatMessageResultSchema: import("@sinclair/typebox"
472
475
  media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
473
476
  }>>>;
474
477
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
478
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
475
479
  }>>;
476
480
  artifact_preview: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
477
481
  kind: import("@sinclair/typebox").TLiteral<"artifact_preview">;
@@ -610,6 +614,7 @@ export declare const MessageCreatedEventPayloadSchema: import("@sinclair/typebox
610
614
  media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
611
615
  }>>>;
612
616
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
617
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
613
618
  }>>;
614
619
  artifact_preview: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
615
620
  kind: import("@sinclair/typebox").TLiteral<"artifact_preview">;
@@ -106,6 +106,7 @@ export const TaskResultRefSchema = Type.Object({
106
106
  final_note: Type.Optional(Type.String()),
107
107
  generated_files: Type.Optional(Type.Array(WorklistFeedbackGeneratedFileSchema)),
108
108
  error_code: Type.Optional(NonEmptyStringSchema),
109
+ retry_action: Type.Optional(Type.Union([Type.Literal("retryable"), Type.Literal("retried")])),
109
110
  }, { additionalProperties: false });
110
111
  export const WorklistCompileRefSchema = Type.Object({
111
112
  kind: Type.Literal("worklist_compile"),
@@ -490,6 +490,7 @@ export declare const TaskDetailUpdatedEventPayloadSchema: import("@sinclair/type
490
490
  }>>;
491
491
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
492
492
  retryable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
493
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
493
494
  updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
494
495
  }>;
495
496
  frozen_contract_since_activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -14,7 +14,7 @@ import type { GetProjectDocRequestSchema, GetProjectDocResponseSchema, GetProjec
14
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
- 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";
17
+ import type { ContextSyncDispositionSchema, ContextSyncPayloadSchema, ContextSyncResultSchema, InitializeProjectDocsDispositionSchema, InitializeProjectDocsPayloadSchema, InitializeProjectDocsResultSchema, RefreshScratchpadDispositionSchema, RefreshScratchpadResultSchema, RunSchedulerNowDispositionSchema, RunSchedulerNowPayloadSchema, RetryTaskDispositionSchema, RetryTaskPayloadSchema, SubmitWorklistDispositionSchema, SubmitWorklistPayloadSchema, SubmitWorklistResultSchema, UpdateProjectDescriptionDispositionSchema, UpdateProjectDescriptionPayloadSchema, UpdateProjectDescriptionResultSchema, UpdateProjectDisplayNameDispositionSchema, UpdateProjectDisplayNamePayloadSchema, UpdateProjectDisplayNameResultSchema } from "./workspace-commands.js";
18
18
  export type CursorPageRequest = Static<typeof CursorPageRequestSchema>;
19
19
  export type CursorPage<TItem> = {
20
20
  items: TItem[];
@@ -225,6 +225,9 @@ export type IssueArtifactPreviewSessionResponse = CommandResponse<IssueArtifactP
225
225
  export type RunSchedulerNowPayload = Static<typeof RunSchedulerNowPayloadSchema>;
226
226
  export type RunSchedulerNowDisposition = Static<typeof RunSchedulerNowDispositionSchema>;
227
227
  export type RunSchedulerNowResponse = CommandResponse<RunSchedulerNowDisposition>;
228
+ export type RetryTaskPayload = Static<typeof RetryTaskPayloadSchema>;
229
+ export type RetryTaskDisposition = Static<typeof RetryTaskDispositionSchema>;
230
+ export type RetryTaskResponse = CommandResponse<RetryTaskDisposition>;
228
231
  export type UpdateProjectDisplayNamePayload = Static<typeof UpdateProjectDisplayNamePayloadSchema>;
229
232
  export type UpdateProjectDisplayNameDisposition = Static<typeof UpdateProjectDisplayNameDispositionSchema>;
230
233
  export type UpdateProjectDisplayNameResult = Static<typeof UpdateProjectDisplayNameResultSchema>;
@@ -487,6 +487,7 @@ export declare const UploadReferenceFileResultSchema: import("@sinclair/typebox"
487
487
  media_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
488
488
  }>>>;
489
489
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
490
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
490
491
  }>>;
491
492
  artifact_preview: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
492
493
  kind: import("@sinclair/typebox").TLiteral<"artifact_preview">;
@@ -171,6 +171,7 @@ export declare const TaskDetailResultProjectionSchema: import("@sinclair/typebox
171
171
  }>>;
172
172
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
173
173
  retryable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
174
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
174
175
  updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
175
176
  }>;
176
177
  export declare const TaskDetailProjectionSchema: import("@sinclair/typebox").TObject<{
@@ -227,6 +228,7 @@ export declare const TaskDetailProjectionSchema: import("@sinclair/typebox").TOb
227
228
  }>>;
228
229
  error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
229
230
  retryable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
231
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
230
232
  updated_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
231
233
  }>;
232
234
  frozen_contract_since_activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -272,6 +274,7 @@ export declare const RunResultProjectionSchema: import("@sinclair/typebox").TUni
272
274
  started_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
273
275
  finished_at: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
274
276
  }>>>;
277
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
275
278
  created_at: import("@sinclair/typebox").TString;
276
279
  }>, import("@sinclair/typebox").TObject<{
277
280
  id: import("@sinclair/typebox").TString;
@@ -287,6 +290,7 @@ export declare const RunResultProjectionSchema: import("@sinclair/typebox").TUni
287
290
  summary: import("@sinclair/typebox").TString;
288
291
  error_code: import("@sinclair/typebox").TString;
289
292
  retryable: import("@sinclair/typebox").TBoolean;
293
+ retry_action: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"retryable">, import("@sinclair/typebox").TLiteral<"retried">]>>;
290
294
  created_at: import("@sinclair/typebox").TString;
291
295
  }>]>;
292
296
  export declare const TaskRunResultsPageSchema: import("@sinclair/typebox").TSchema;
@@ -149,6 +149,7 @@ export const TaskDetailResultProjectionSchema = Type.Object({
149
149
  }, { additionalProperties: false })),
150
150
  error_code: Type.Optional(NonEmptyStringSchema),
151
151
  retryable: Type.Optional(Type.Boolean()),
152
+ retry_action: Type.Optional(Type.Union([Type.Literal("retryable"), Type.Literal("retried")])),
152
153
  updated_at: Type.Optional(IsoDateTimeStringSchema),
153
154
  }, { additionalProperties: false });
154
155
  export const TaskDetailProjectionSchema = Type.Object({
@@ -191,6 +192,7 @@ export const RunResultProjectionSchema = Type.Union([
191
192
  skip_reason_code: Type.Optional(CheckSkipReasonCodeSchema),
192
193
  skip_reason_summary: Type.Optional(Type.String()),
193
194
  external_side_effects: Type.Optional(Type.Array(ExternalSideEffectSummaryProjectionSchema)),
195
+ retry_action: Type.Optional(Type.Union([Type.Literal("retryable"), Type.Literal("retried")])),
194
196
  created_at: IsoDateTimeStringSchema,
195
197
  }, { additionalProperties: false }),
196
198
  Type.Object({
@@ -202,6 +204,7 @@ export const RunResultProjectionSchema = Type.Union([
202
204
  summary: Type.String(),
203
205
  error_code: NonEmptyStringSchema,
204
206
  retryable: Type.Boolean(),
207
+ retry_action: Type.Optional(Type.Union([Type.Literal("retryable"), Type.Literal("retried")])),
205
208
  created_at: IsoDateTimeStringSchema,
206
209
  }, { additionalProperties: false }),
207
210
  ]);
@@ -145,6 +145,39 @@ export declare const RunSchedulerNowDispositionSchema: import("@sinclair/typebox
145
145
  }>]>;
146
146
  export declare const RunSchedulerNowBodySchema: import("@sinclair/typebox").TSchema;
147
147
  export declare const RunSchedulerNowResponseSchema: import("@sinclair/typebox").TSchema;
148
+ export declare const RetryTaskPayloadSchema: import("@sinclair/typebox").TObject<{
149
+ expected_latest_run_result_id: import("@sinclair/typebox").TString;
150
+ }>;
151
+ export declare const RetryTaskDispositionSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
152
+ kind: import("@sinclair/typebox").TLiteral<"accepted">;
153
+ task_id: import("@sinclair/typebox").TString;
154
+ activity_ref: import("@sinclair/typebox").TString;
155
+ retried_run_result_id: import("@sinclair/typebox").TString;
156
+ }>, import("@sinclair/typebox").TObject<{
157
+ kind: import("@sinclair/typebox").TLiteral<"already_running">;
158
+ activity_ref: import("@sinclair/typebox").TString;
159
+ }>, import("@sinclair/typebox").TObject<{
160
+ kind: import("@sinclair/typebox").TLiteral<"task_not_failed">;
161
+ }>, import("@sinclair/typebox").TObject<{
162
+ kind: import("@sinclair/typebox").TLiteral<"latest_run_result_changed">;
163
+ latest_run_result_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
164
+ }>, import("@sinclair/typebox").TObject<{
165
+ kind: import("@sinclair/typebox").TLiteral<"retry_already_started">;
166
+ activity_ref: import("@sinclair/typebox").TString;
167
+ }>, import("@sinclair/typebox").TObject<{
168
+ kind: import("@sinclair/typebox").TLiteral<"retry_requires_resolution">;
169
+ }>, import("@sinclair/typebox").TObject<{
170
+ kind: import("@sinclair/typebox").TLiteral<"provider_not_configured">;
171
+ }>, import("@sinclair/typebox").TObject<{
172
+ kind: import("@sinclair/typebox").TLiteral<"provider_unavailable">;
173
+ reason: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"provider_auth_invalid">, import("@sinclair/typebox").TLiteral<"provider_quota_or_billing_required">, import("@sinclair/typebox").TLiteral<"provider_rate_limited">, import("@sinclair/typebox").TLiteral<"provider_model_unavailable">, import("@sinclair/typebox").TLiteral<"provider_network_error">, import("@sinclair/typebox").TLiteral<"unknown">]>;
174
+ retryable: import("@sinclair/typebox").TBoolean;
175
+ }>, import("@sinclair/typebox").TObject<{
176
+ kind: import("@sinclair/typebox").TLiteral<"interrupted">;
177
+ retry_with_new_command_id: import("@sinclair/typebox").TLiteral<true>;
178
+ }>]>;
179
+ export declare const RetryTaskBodySchema: import("@sinclair/typebox").TSchema;
180
+ export declare const RetryTaskResponseSchema: import("@sinclair/typebox").TSchema;
148
181
  export declare const UpdateProjectDisplayNamePayloadSchema: import("@sinclair/typebox").TObject<{
149
182
  display_name: import("@sinclair/typebox").TString;
150
183
  }>;
@@ -1,5 +1,5 @@
1
1
  import { Type } from "@sinclair/typebox";
2
- import { ActivityRefSchema, ClarificationRoundRefSchema, ClarificationThreadRefSchema, IsoDateTimeStringSchema, TaskIdSchema, WorkflowInvocationRefSchema, } from "../domain/index.js";
2
+ import { ActivityRefSchema, ClarificationRoundRefSchema, ClarificationThreadRefSchema, IsoDateTimeStringSchema, TaskIdSchema, RunResultIdSchema, WorkflowInvocationRefSchema, } from "../domain/index.js";
3
3
  import { ProviderUnavailableReasonCodeSchema } from "./provider-config.js";
4
4
  import { InterruptedCommandDispositionSchema, NonEmptyStringSchema, commandEnvelopeSchema, commandResponseSchema, commandResponseWithResultSchema, } from "./primitives.js";
5
5
  import { ProjectDocSummaryProjectionSchema, ViewerPathSchema, } from "./viewer-reference.js";
@@ -84,6 +84,40 @@ export const RunSchedulerNowDispositionSchema = Type.Union([
84
84
  ]);
85
85
  export const RunSchedulerNowBodySchema = commandEnvelopeSchema(RunSchedulerNowPayloadSchema);
86
86
  export const RunSchedulerNowResponseSchema = commandResponseSchema(RunSchedulerNowDispositionSchema);
87
+ export const RetryTaskPayloadSchema = Type.Object({
88
+ expected_latest_run_result_id: RunResultIdSchema,
89
+ }, { additionalProperties: false });
90
+ export const RetryTaskDispositionSchema = Type.Union([
91
+ Type.Object({
92
+ kind: Type.Literal("accepted"),
93
+ task_id: TaskIdSchema,
94
+ activity_ref: ActivityRefSchema,
95
+ retried_run_result_id: RunResultIdSchema,
96
+ }, { additionalProperties: false }),
97
+ Type.Object({
98
+ kind: Type.Literal("already_running"),
99
+ activity_ref: ActivityRefSchema,
100
+ }, { additionalProperties: false }),
101
+ Type.Object({ kind: Type.Literal("task_not_failed") }, { additionalProperties: false }),
102
+ Type.Object({
103
+ kind: Type.Literal("latest_run_result_changed"),
104
+ latest_run_result_id: Type.Optional(RunResultIdSchema),
105
+ }, { additionalProperties: false }),
106
+ Type.Object({
107
+ kind: Type.Literal("retry_already_started"),
108
+ activity_ref: ActivityRefSchema,
109
+ }, { additionalProperties: false }),
110
+ Type.Object({ kind: Type.Literal("retry_requires_resolution") }, { additionalProperties: false }),
111
+ Type.Object({ kind: Type.Literal("provider_not_configured") }, { additionalProperties: false }),
112
+ Type.Object({
113
+ kind: Type.Literal("provider_unavailable"),
114
+ reason: ProviderUnavailableReasonCodeSchema,
115
+ retryable: Type.Boolean(),
116
+ }, { additionalProperties: false }),
117
+ InterruptedCommandDispositionSchema,
118
+ ]);
119
+ export const RetryTaskBodySchema = commandEnvelopeSchema(RetryTaskPayloadSchema);
120
+ export const RetryTaskResponseSchema = commandResponseSchema(RetryTaskDispositionSchema);
87
121
  export const UpdateProjectDisplayNamePayloadSchema = Type.Object({
88
122
  display_name: Type.String({ minLength: 1, maxLength: 80 }),
89
123
  }, { additionalProperties: false });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xfey/tutti",
3
- "version": "0.1.94",
3
+ "version": "0.1.95",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -1,21 +1,16 @@
1
1
  # runs
2
2
 
3
- These templates are used by task `Run` execution.
3
+ Formal Task execution uses one durable Task-scoped Codex Thread and four templates:
4
4
 
5
- - `task-run.md` is rendered for initial task Runs.
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 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
- 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.
5
+ - `task-execute.md` supplies the Task goal, scope, pinned source material, workspace rules, documentation rules, Artifact contract, and safety boundary. It runs with workspace write access and no structured output schema.
6
+ - `task-finalize.md` is a short read-only instruction that asks Codex to describe the work already completed using `task-result-contract.md` and the current turn output schema.
7
+ - `task-recovery.md` combines the concrete bounded failure evidence with the complete result contract. Output-only failures run read-only; candidate, Artifact, or checks failures may run with workspace write access.
8
+ - `task-result-contract.md` is the single human-readable definition of the four mutually exclusive Task result branches and must stay aligned with `TASK_RUN_OUTPUT_SCHEMA`.
9
9
 
10
- `task-run.md` keeps implementation judgment inside the frozen contract with Codex. Human clarification is reserved for interpreting contract intent, choosing among incompatible requirements or source facts, supplying required non-secret context, relaxing an explicit constraint, or accepting a material risk or external effect. Technical difficulty, tooling failure, and validation failure stay with the Run when they can be handled; otherwise the result is `failed`, not a question for the user. 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.
11
- Initial `task-run.md`, active `task-continuation.md`, and active pipeline `task-retry.md` receive the compact task contract fields `title / goal / scope` plus optional receipt-derived `source_messages`, completed Task Compile `clarification_rounds`, and `recent_references`. Source messages and clarification answers preserve the exact submitted material in ordered `role / optional author_display_name / text` entries; each reference includes only path, final name and available/unavailable summary. The contract defines execution scope, while these fields supply exact content referenced by it. Continuation adds the required task-bound `continuation` block, and pipeline self-correction retry adds the required `correction` block with the previous failure summary, machine-generated reason code, correction guidance, a required redacted / bounded diagnostic, and `promotion_failure` as either a complete object or explicit `null`. Provider transient retry and self-correction both preserve all compile-time source context. Provider-facing prompts do not receive task ids, task summaries, Run lineage, workflow anchors, blob ids, message ids, changed paths, docs status, checks status, or the safety audit context entry.
12
- All three Run templates use a slim mutually exclusive structured output schema under `result`: exactly one of `completed.{summary,user_note_candidate}`, `completed_no_repo_changes.{summary,user_note_candidate}`, `needs_human.{title,summary,request}`, or `failed.summary`. The `summary` is a concise, human-readable result note for project members who may not inspect the code. Completed branches also require `user_note_candidate`, which is either a short user-facing final-card sentence or `null`; it must not repeat `summary` or include file paths. Checks, docs, promotion, changed paths, and other Tutti status stay in structured fields derived by the Run pipeline. They do not ask Codex to self-report docs status or changed paths; both come from Run pipeline Git diff and derived projection.
13
- Run templates describe `docs/reference/` as a user-visible file exchange area. Human uploads remain under `docs/reference/files/` and `docs/reference/images/`; `docs/reference/tutti/**` is for Tutti-generated files intended for direct member review in References, not temporary output, internal notes, logs, or canonical project documentation. Generated user-visible files must be written under `docs/reference/tutti/`, with `docs/reference/tutti/<meaningful-folder>/...` used when the folder name should be shown as a References UI group. Generated files under `docs/reference/tutti/` are discovered from promoted changed paths, rendered by References automatically, and may be listed in completed task result cards.
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
- Active task-bound follow-up still only starts continuation Runs from `Run.needs_human`. `follow_up_check` resumes when the identified human decision is resolved in the same contract, asks for more input only while that same decision remains unresolved, and requires retasking when honoring the answer would change goal or scope; it does not delegate Run-owned implementation choices. Continuation applies the same Run boundary after considering the answers and never repeats a resolved question. Pipeline self-correction retry happens before a terminal Run result is recorded; it treats correction as machine feedback, repairs it inside the frozen contract by default, and only returns `needs_human` when the feedback exposes a genuinely unresolved human decision under the normal Run boundary.
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.
10
+ Initial Execute receives compact `title / goal / scope` plus pinned `source_messages`, completed Task Compile `clarification_rounds`, and `recent_references` when present. Continuation Execute reuses the same Thread and adds only the sealed clarification outcome and resume summary. Finalize does not repeat Task context or implementation instructions.
18
11
 
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.
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.
21
- Successful source-changing Runs create an accepted commit and immutable `tutti/accepted/<activity_ref>` tag after Artifact validation and checks. Prompt templates do not own staging, commit/tag creation, recovery, or promotion semantics.
12
+ Recovery retains the previous valid Task result or bounded raw final output together with the actual parser, Artifact, candidate, or checks diagnostic. Failure evidence never replaces the complete result contract. Attempt numbers, command ids, member identity, Activity ids, session paths, and Thread lifecycle details stay outside model context.
13
+
14
+ Only a schema-valid Finalize or Recovery `needs_human` result can open task-bound clarification. Execute handoff text never opens clarification by itself.
15
+
16
+ Task session state is machine-local and outside the repository. Prompt templates must never include provider credentials, Host-local session paths, raw secrets, or browser capability tokens. Checks, changed paths, documentation status, and accepted checkpoint state remain Host-derived facts rather than model claims.