@xfey/tutti 0.1.21 → 0.1.23

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 (38) hide show
  1. package/dist/collaboration-state/index.d.ts +1 -1
  2. package/dist/collaboration-state/index.js +1 -1
  3. package/dist/collaboration-state/messages.js +50 -1
  4. package/dist/collaboration-state/scratchpad.d.ts +2 -0
  5. package/dist/collaboration-state/scratchpad.js +63 -0
  6. package/dist/collaboration-state/storage-types.d.ts +5 -0
  7. package/dist/collaboration-state/types.d.ts +8 -1
  8. package/dist/control-plane/scratchpad-refresh-start.d.ts +2 -0
  9. package/dist/control-plane/scratchpad-refresh-start.js +10 -0
  10. package/dist/control-plane/scratchpad-refresh.d.ts +2 -0
  11. package/dist/control-plane/scratchpad-refresh.js +1 -0
  12. package/dist/project-timeline/index.d.ts +17 -3
  13. package/dist/server-shell/cli/host-lifecycle.js +2 -19
  14. package/dist/server-shell/cli/launch-command.d.ts +11 -0
  15. package/dist/server-shell/cli/launch-command.js +42 -6
  16. package/dist/server-shell/cli/terminal-qr.d.ts +3 -0
  17. package/dist/server-shell/cli/terminal-qr.js +17 -0
  18. package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.d.ts +1 -0
  19. package/dist/server-shell/http/routes/project-api/openapi-timeline-routes.d.ts +94 -5
  20. package/dist/server-shell/http/routes/project-api/openapi.d.ts +95 -5
  21. package/dist/server-shell/http/routes/project-api/payload-validation.d.ts +6 -2
  22. package/dist/server-shell/http/routes/project-api/payload-validation.js +3 -0
  23. package/dist/server-shell/http/routes/project-api/project-timeline-projection.js +694 -502
  24. package/migrations/0013_scratchpad_receipt_sources.sql +24 -0
  25. package/migrations/README.md +3 -2
  26. package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +1 -1
  27. package/node_modules/@tutti/shared/dist/schemas/api/index.js +1 -1
  28. package/node_modules/@tutti/shared/dist/schemas/api/messages.d.ts +1 -0
  29. package/node_modules/@tutti/shared/dist/schemas/api/messages.js +1 -0
  30. package/node_modules/@tutti/shared/dist/schemas/api/project-timeline.d.ts +313 -12
  31. package/node_modules/@tutti/shared/dist/schemas/api/project-timeline.js +131 -14
  32. package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +5 -1
  33. package/package.json +1 -1
  34. package/web/assets/index-BfFYfzeO.js +29 -0
  35. package/web/assets/index-De6mK5Q2.css +1 -0
  36. package/web/index.html +2 -2
  37. package/web/assets/index-BtneECwp.js +0 -29
  38. package/web/assets/index-CM9mbbeW.css +0 -1
@@ -170,6 +170,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
170
170
  anchor: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"latest">, import("@sinclair/typebox").TLiteral<"start">]>>;
171
171
  before: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
172
172
  after: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
173
+ around: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
173
174
  }>;
174
175
  responses: {
175
176
  200: {
@@ -963,7 +964,7 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
963
964
  }>;
964
965
  items: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
965
966
  id: import("@sinclair/typebox").TString;
966
- kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"run">, import("@sinclair/typebox").TLiteral<"procedure">, import("@sinclair/typebox").TLiteral<"commit">, import("@sinclair/typebox").TLiteral<"usage">, import("@sinclair/typebox").TLiteral<"clarification">, import("@sinclair/typebox").TLiteral<"checks">, import("@sinclair/typebox").TLiteral<"promotion">, import("@sinclair/typebox").TLiteral<"recovery">]>;
967
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"task_accepted">, import("@sinclair/typebox").TLiteral<"task_update">, import("@sinclair/typebox").TLiteral<"checkpoint">]>;
967
968
  occurred_at: import("@sinclair/typebox").TString;
968
969
  title: import("@sinclair/typebox").TString;
969
970
  summary: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -971,9 +972,10 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
971
972
  task_title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
972
973
  activity_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
973
974
  workflow_ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
974
- commit_oid: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
975
- commit_short_oid: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
976
- status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"running">, import("@sinclair/typebox").TLiteral<"completed">, import("@sinclair/typebox").TLiteral<"failed">, import("@sinclair/typebox").TLiteral<"needs_human">, import("@sinclair/typebox").TLiteral<"skipped">]>>;
975
+ run_result_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
976
+ message_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
977
+ status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"completed">, import("@sinclair/typebox").TLiteral<"failed">, import("@sinclair/typebox").TLiteral<"needs_human">]>>;
978
+ update_state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"completed">, import("@sinclair/typebox").TLiteral<"failed">]>>;
977
979
  token_usage: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
978
980
  input_tokens: import("@sinclair/typebox").TInteger;
979
981
  cached_input_tokens: import("@sinclair/typebox").TInteger;
@@ -1002,7 +1004,95 @@ export declare const HOST_PROJECT_OPENAPI_ROUTES: ({
1002
1004
  total_tokens: import("@sinclair/typebox").TInteger;
1003
1005
  event_count: import("@sinclair/typebox").TInteger;
1004
1006
  }>>>;
1005
- meta: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
1007
+ trace_card: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1008
+ tone: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"neutral">, import("@sinclair/typebox").TLiteral<"success">, import("@sinclair/typebox").TLiteral<"warning">, import("@sinclair/typebox").TLiteral<"error">]>;
1009
+ summary: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1010
+ origin: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1011
+ title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1012
+ summary: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1013
+ snippets: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1014
+ message_id: import("@sinclair/typebox").TString;
1015
+ author: import("@sinclair/typebox").TString;
1016
+ body: import("@sinclair/typebox").TString;
1017
+ created_at: import("@sinclair/typebox").TString;
1018
+ }>>>;
1019
+ source_count: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1020
+ unavailable_reason: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1021
+ }>>;
1022
+ decisions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1023
+ title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1024
+ summary: import("@sinclair/typebox").TString;
1025
+ source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"scratchpad">, import("@sinclair/typebox").TLiteral<"clarification">, import("@sinclair/typebox").TLiteral<"contract">]>>;
1026
+ }>>>;
1027
+ clarification: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1028
+ title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1029
+ summary: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1030
+ request: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1031
+ status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"active">, import("@sinclair/typebox").TLiteral<"resolved">]>>;
1032
+ answer_count: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
1033
+ answers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1034
+ message_id: import("@sinclair/typebox").TString;
1035
+ author: import("@sinclair/typebox").TString;
1036
+ body: import("@sinclair/typebox").TString;
1037
+ created_at: import("@sinclair/typebox").TString;
1038
+ }>>>;
1039
+ }>>;
1040
+ contract: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1041
+ goal: import("@sinclair/typebox").TString;
1042
+ scope: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
1043
+ truncated: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1044
+ }>>;
1045
+ result: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1046
+ summary: import("@sinclair/typebox").TString;
1047
+ error_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1048
+ }>>;
1049
+ changes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1050
+ items: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1051
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"added">, import("@sinclair/typebox").TLiteral<"modified">, import("@sinclair/typebox").TLiteral<"deleted">, import("@sinclair/typebox").TLiteral<"renamed">, import("@sinclair/typebox").TLiteral<"unknown">]>;
1052
+ path: import("@sinclair/typebox").TString;
1053
+ previous_path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1054
+ }>>;
1055
+ total_count: import("@sinclair/typebox").TInteger;
1056
+ truncated: import("@sinclair/typebox").TBoolean;
1057
+ }>>;
1058
+ verification: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1059
+ checks: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"passed">, import("@sinclair/typebox").TLiteral<"failed">, import("@sinclair/typebox").TLiteral<"skipped">]>;
1060
+ skip_reason_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1061
+ skip_reason_summary: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1062
+ }>>;
1063
+ promotion: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1064
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"promoted">, import("@sinclair/typebox").TLiteral<"not_promoted">, import("@sinclair/typebox").TLiteral<"not_attempted">]>;
1065
+ commit_oid: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1066
+ commit_short_oid: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1067
+ summary: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1068
+ reason_code: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1069
+ }>>;
1070
+ checkpoint: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
1071
+ counters: import("@sinclair/typebox").TObject<{
1072
+ completed: import("@sinclair/typebox").TInteger;
1073
+ failed: import("@sinclair/typebox").TInteger;
1074
+ remaining: import("@sinclair/typebox").TInteger;
1075
+ }>;
1076
+ items: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1077
+ task_id: import("@sinclair/typebox").TString;
1078
+ title: import("@sinclair/typebox").TString;
1079
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"done">, import("@sinclair/typebox").TLiteral<"failed">]>;
1080
+ summary: import("@sinclair/typebox").TString;
1081
+ }>>;
1082
+ generated_files: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1083
+ path: import("@sinclair/typebox").TString;
1084
+ name: import("@sinclair/typebox").TString;
1085
+ }>>>;
1086
+ truncated: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
1087
+ }>>;
1088
+ links: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
1089
+ kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"worklist_task">, import("@sinclair/typebox").TLiteral<"chat_message">, import("@sinclair/typebox").TLiteral<"reference_file">, import("@sinclair/typebox").TLiteral<"repo_path">]>;
1090
+ label: import("@sinclair/typebox").TString;
1091
+ task_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1092
+ message_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1093
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
1094
+ }>>;
1095
+ }>>;
1006
1096
  }>>;
1007
1097
  }>;
1008
1098
  };
@@ -1,5 +1,9 @@
1
- import type { GetMessagesRequest, SendClarificationRoundMessagePayload, SendMainChatMessagePayload, UpdateProjectDescriptionPayload, UpdateProjectDisplayNamePayload } from "@tutti/shared/schemas/api";
2
- export declare function requireValidMessageWindowRequest(query: GetMessagesRequest): GetMessagesRequest;
1
+ import type { SendClarificationRoundMessagePayload, SendMainChatMessagePayload, UpdateProjectDescriptionPayload, UpdateProjectDisplayNamePayload } from "@tutti/shared/schemas/api";
2
+ export declare function requireValidMessageWindowRequest<T extends {
3
+ before?: string;
4
+ after?: string;
5
+ around?: string;
6
+ }>(query: T): T;
3
7
  export declare function requireValidSendMainChatPayload(payload: SendMainChatMessagePayload): SendMainChatMessagePayload;
4
8
  export declare function requireValidRoundMessagePayload(payload: SendClarificationRoundMessagePayload): SendClarificationRoundMessagePayload;
5
9
  export declare function requireValidProjectDisplayNamePayload(payload: UpdateProjectDisplayNamePayload): UpdateProjectDisplayNamePayload;
@@ -3,6 +3,9 @@ export function requireValidMessageWindowRequest(query) {
3
3
  if (query.before !== undefined && query.after !== undefined) {
4
4
  throw new HostProjectBadRequestError("before and after cursors cannot be used together");
5
5
  }
6
+ if (query.around !== undefined && (query.before !== undefined || query.after !== undefined)) {
7
+ throw new HostProjectBadRequestError("around cannot be used with before or after cursors");
8
+ }
6
9
  return query;
7
10
  }
8
11
  export function requireValidSendMainChatPayload(payload) {