@aexol/spectral 0.9.263 → 0.9.264

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.
@@ -12,7 +12,13 @@
12
12
  * matching tool_result → { from: "observation",
13
13
  * value: text of result.content,
14
14
  * "[ERROR] " prefix when isError }
15
- * thinking_* events → DISCARDED (non-thinking target)
15
+ * thinking_delta text → { from: "gpt", value:
16
+ * " think\n...\n/think" }
17
+ * (INCLUDED by default;
18
+ * includeThinking: "drop"
19
+ * restores the old
20
+ * non-thinking-target
21
+ * discard behavior)
16
22
  *
17
23
  * Per-turn expansion: each assistant message row that produces at least one
18
24
  * entry becomes one sample — `{ conversations: [all entries up to and
@@ -70,6 +76,15 @@ export interface ExportSessionsOptions {
70
76
  * intact). Default false → observations capped at MAX_OBSERVATION_CHARS.
71
77
  */
72
78
  includeSubagents?: boolean;
79
+ /**
80
+ * How assistant thinking (reasoning) events are exported. "tags"
81
+ * (default): the concatenated thinking_delta text of each thinking
82
+ * block is emitted as a gpt entry wrapped in think tags
83
+ * (` think\n...\n/think`), flushed at the earliest of thinking_end,
84
+ * first text_delta, tool_call, or tool_result. "drop": thinking events
85
+ * are discarded (the old non-thinking-target behavior).
86
+ */
87
+ includeThinking?: "tags" | "drop";
73
88
  /** Output JSONL path. Default: `<configDir>/datasets/export-<timestamp>.jsonl`. */
74
89
  outputPath?: string;
75
90
  /**
@@ -132,10 +147,16 @@ export interface ParsedAssistantTurn {
132
147
  export declare function extractResultText(result: AssistantEvent["result"]): string;
133
148
  /**
134
149
  * Parse an assistant row's events_jsonl into sharegpt entries, in event
135
- * order. Thinking events are discarded. When `capChars` is non-null,
136
- * observation values are truncated to it + OBSERVATION_TRUNCATION_MARKER.
150
+ * order. When `includeThinking` is "tags" (default), the concatenated
151
+ * thinking_delta text of each thinking block is flushed as a gpt entry
152
+ * wrapped in think tags (` think\n...\n/think`) at the earliest of
153
+ * thinking_end, first text_delta, tool_call, or tool_result (which also
154
+ * handles the rare mid-row text→thinking→text case). "drop" discards
155
+ * thinking events entirely (byte-identical to the old non-thinking-target
156
+ * behavior). When `capChars` is non-null, observation values are
157
+ * truncated to it + OBSERVATION_TRUNCATION_MARKER.
137
158
  */
138
- export declare function parseAssistantEvents(eventsJsonl: string, capChars?: number | null): ParsedAssistantTurn;
159
+ export declare function parseAssistantEvents(eventsJsonl: string, capChars?: number | null, includeThinking?: "tags" | "drop"): ParsedAssistantTurn;
139
160
  /**
140
161
  * Export sessions from the local sessions DB to a sharegpt JSONL file.
141
162
  *
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/exporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/exporter.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,13 @@
12
12
  * matching tool_result → { from: "observation",
13
13
  * value: text of result.content,
14
14
  * "[ERROR] " prefix when isError }
15
- * thinking_* events → DISCARDED (non-thinking target)
15
+ * thinking_delta text → { from: "gpt", value:
16
+ * " think\n...\n/think" }
17
+ * (INCLUDED by default;
18
+ * includeThinking: "drop"
19
+ * restores the old
20
+ * non-thinking-target
21
+ * discard behavior)
16
22
  *
17
23
  * Per-turn expansion: each assistant message row that produces at least one
18
24
  * entry becomes one sample — `{ conversations: [all entries up to and
@@ -107,20 +113,33 @@ export function extractResultText(result) {
107
113
  }
108
114
  /**
109
115
  * Parse an assistant row's events_jsonl into sharegpt entries, in event
110
- * order. Thinking events are discarded. When `capChars` is non-null,
111
- * observation values are truncated to it + OBSERVATION_TRUNCATION_MARKER.
116
+ * order. When `includeThinking` is "tags" (default), the concatenated
117
+ * thinking_delta text of each thinking block is flushed as a gpt entry
118
+ * wrapped in think tags (` think\n...\n/think`) at the earliest of
119
+ * thinking_end, first text_delta, tool_call, or tool_result (which also
120
+ * handles the rare mid-row text→thinking→text case). "drop" discards
121
+ * thinking events entirely (byte-identical to the old non-thinking-target
122
+ * behavior). When `capChars` is non-null, observation values are
123
+ * truncated to it + OBSERVATION_TRUNCATION_MARKER.
112
124
  */
113
- export function parseAssistantEvents(eventsJsonl, capChars = null) {
125
+ export function parseAssistantEvents(eventsJsonl, capChars = null, includeThinking = "tags") {
114
126
  const entries = [];
115
127
  const toolNames = [];
116
128
  const pendingCallIds = new Set();
117
129
  let textBuffer = "";
130
+ let thinkingBuffer = "";
118
131
  const flushText = () => {
119
132
  if (textBuffer.length > 0) {
120
133
  entries.push({ from: "gpt", value: textBuffer });
121
134
  textBuffer = "";
122
135
  }
123
136
  };
137
+ const flushThinking = () => {
138
+ if (thinkingBuffer.length > 0) {
139
+ entries.push({ from: "gpt", value: ` think\n${thinkingBuffer}\n/think` });
140
+ thinkingBuffer = "";
141
+ }
142
+ };
124
143
  for (const line of eventsJsonl.split("\n")) {
125
144
  const trimmed = line.trim();
126
145
  if (!trimmed)
@@ -134,9 +153,19 @@ export function parseAssistantEvents(eventsJsonl, capChars = null) {
134
153
  }
135
154
  switch (event.type) {
136
155
  case "text_delta":
156
+ // First visible text ends the current thinking block.
157
+ flushThinking();
137
158
  textBuffer += event.delta ?? "";
138
159
  break;
160
+ case "thinking_delta":
161
+ if (includeThinking !== "drop")
162
+ thinkingBuffer += event.delta ?? "";
163
+ break;
164
+ case "thinking_end":
165
+ flushThinking();
166
+ break;
139
167
  case "tool_call":
168
+ flushThinking();
140
169
  flushText();
141
170
  if (typeof event.name === "string" && event.name.length > 0) {
142
171
  entries.push({
@@ -149,6 +178,7 @@ export function parseAssistantEvents(eventsJsonl, capChars = null) {
149
178
  }
150
179
  break;
151
180
  case "tool_result": {
181
+ flushThinking();
152
182
  flushText();
153
183
  // Only emit observations that match a tool_call from this turn.
154
184
  if (typeof event.id !== "string" || !pendingCallIds.has(event.id))
@@ -164,10 +194,11 @@ export function parseAssistantEvents(eventsJsonl, capChars = null) {
164
194
  break;
165
195
  }
166
196
  default:
167
- // thinking_*, message_*, token_usage, subagent_* → discarded
197
+ // message_*, token_usage, subagent_* → discarded
168
198
  break;
169
199
  }
170
200
  }
201
+ flushThinking();
171
202
  flushText();
172
203
  return { entries, toolNames };
173
204
  }
@@ -276,7 +307,7 @@ export function exportSessions(options = {}) {
276
307
  }
277
308
  if (row.role !== "assistant")
278
309
  continue; // system rows are not part of SFT samples
279
- const turn = parseAssistantEvents(row.events_jsonl, cap);
310
+ const turn = parseAssistantEvents(row.events_jsonl, cap, options.includeThinking);
280
311
  if (turn.entries.length === 0)
281
312
  continue;
282
313
  for (const name of turn.toolNames) {
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/upload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAYH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC9D,uEAAuE;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAQD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAE7E;AAmFD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAkH9B;AAMD,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA2CxE"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/upload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAYH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC9D,uEAAuE;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAQD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAE7E;AAmFD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA2H9B;AAMD,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA2CxE"}
@@ -192,10 +192,18 @@ export async function uploadDataset(options) {
192
192
  if (projectId)
193
193
  args.projectId = projectId;
194
194
  const payload = await call(BACKEND_UPLOAD_TOOL, args);
195
- const result = (payload && typeof payload === "object" ? payload : {});
196
- const accepted = toInt(result.accepted, 0);
197
- const duplicates = toInt(result.duplicates, 0);
198
- const rejected = toInt(result.rejected, 0);
195
+ const wrapper = (payload && typeof payload === "object" ? payload : {});
196
+ // The backend wraps tool results as `{ ok, result: {...} }`; the
197
+ // DatasetUploadResult counters ({accepted, duplicates, rejected}) live
198
+ // under `result`. Unwrap when present; otherwise fall back to the wrapper
199
+ // itself so older/mock shapes (counters at the top level) and unexpected
200
+ // shapes degrade safely to zero without throwing.
201
+ const resultSource = wrapper.result && typeof wrapper.result === "object"
202
+ ? wrapper.result
203
+ : wrapper;
204
+ const accepted = toInt(resultSource.accepted, 0);
205
+ const duplicates = toInt(resultSource.duplicates, 0);
206
+ const rejected = toInt(resultSource.rejected, 0);
199
207
  batches.push({ projectId, sent: chunk.length, accepted, duplicates, rejected });
200
208
  totals.accepted += accepted;
201
209
  totals.duplicates += duplicates;
@@ -1 +1 @@
1
- {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/generated/zeus/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CA47B5C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CAg5C1C,CAAA;AAED,eAAO,MAAM,GAAG;;;;CAIf,CAAA"}
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/generated/zeus/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CAq8B5C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CA45C1C,CAAA;AAED,eAAO,MAAM,GAAG;;;;CAIf,CAAA"}
@@ -124,6 +124,7 @@ export const AllTypesProps = {
124
124
  projectUsage: {
125
125
  filter: "TeamUsageFilterInput"
126
126
  },
127
+ sharedFile: {},
127
128
  fromTask: {},
128
129
  fromTasks: {},
129
130
  presets: {
@@ -315,6 +316,8 @@ export const AllTypesProps = {
315
316
  input: "UpdateProjectFileInput"
316
317
  },
317
318
  deleteProjectFile: {},
319
+ shareProjectFile: {},
320
+ unshareProjectFile: {},
318
321
  generateAexolFromText: {
319
322
  input: "GenerateAexolFromTextInput"
320
323
  },
@@ -840,6 +843,15 @@ export const ReturnTypes = {
840
843
  createdAt: "DateTime",
841
844
  updatedAt: "DateTime"
842
845
  },
846
+ SharedProjectFile: {
847
+ name: "String",
848
+ content: "String",
849
+ updatedAt: "DateTime"
850
+ },
851
+ ShareProjectFileResult: {
852
+ fileId: "ID",
853
+ token: "String"
854
+ },
843
855
  PresetFollowUpMessage: {
844
856
  content: "String",
845
857
  mode: "FollowUpMode"
@@ -1070,6 +1082,7 @@ export const ReturnTypes = {
1070
1082
  project: "Project",
1071
1083
  projects: "Project",
1072
1084
  projectUsage: "ProjectUsage",
1085
+ sharedFile: "SharedProjectFile",
1073
1086
  fromTask: "FromTask",
1074
1087
  fromTasks: "FromTask",
1075
1088
  presets: "Preset",
@@ -1202,6 +1215,8 @@ export const ReturnTypes = {
1202
1215
  createProjectFile: "ProjectFile",
1203
1216
  updateProjectFile: "ProjectFile",
1204
1217
  deleteProjectFile: "Boolean",
1218
+ shareProjectFile: "ShareProjectFileResult",
1219
+ unshareProjectFile: "Boolean",
1205
1220
  generateAexolFromText: "FromTask",
1206
1221
  cancelFromTask: "Boolean",
1207
1222
  requestCloudDocumentUpload: "CloudDocumentUpload",
@@ -679,6 +679,19 @@ export type ValueTypes = {
679
679
  __typename?: boolean | `@${string}`;
680
680
  ['...on ProjectFile']?: Omit<ValueTypes["ProjectFile"], "...on ProjectFile">;
681
681
  }>;
682
+ ["SharedProjectFile"]: AliasType<{
683
+ name?: boolean | `@${string}`;
684
+ content?: boolean | `@${string}`;
685
+ updatedAt?: boolean | `@${string}`;
686
+ __typename?: boolean | `@${string}`;
687
+ ['...on SharedProjectFile']?: Omit<ValueTypes["SharedProjectFile"], "...on SharedProjectFile">;
688
+ }>;
689
+ ["ShareProjectFileResult"]: AliasType<{
690
+ fileId?: boolean | `@${string}`;
691
+ token?: boolean | `@${string}`;
692
+ __typename?: boolean | `@${string}`;
693
+ ['...on ShareProjectFileResult']?: Omit<ValueTypes["ShareProjectFileResult"], "...on ShareProjectFileResult">;
694
+ }>;
682
695
  ["PresetScope"]: PresetScope;
683
696
  ["PresetCategory"]: PresetCategory;
684
697
  ["CostTier"]: CostTier;
@@ -1180,6 +1193,9 @@ export type ValueTypes = {
1180
1193
  projectId: ValueTypes["ID"] | Variable<any, string>;
1181
1194
  filter?: ValueTypes["TeamUsageFilterInput"] | undefined | null | Variable<any, string>;
1182
1195
  }, ValueTypes["ProjectUsage"]];
1196
+ sharedFile?: [{
1197
+ token: string | Variable<any, string>;
1198
+ }, ValueTypes["SharedProjectFile"]];
1183
1199
  fromTask?: [{
1184
1200
  id: ValueTypes["ID"] | Variable<any, string>;
1185
1201
  }, ValueTypes["FromTask"]];
@@ -1628,6 +1644,12 @@ export type ValueTypes = {
1628
1644
  deleteProjectFile?: [{
1629
1645
  id: ValueTypes["ID"] | Variable<any, string>;
1630
1646
  }, boolean | `@${string}`];
1647
+ shareProjectFile?: [{
1648
+ id: ValueTypes["ID"] | Variable<any, string>;
1649
+ }, ValueTypes["ShareProjectFileResult"]];
1650
+ unshareProjectFile?: [{
1651
+ id: ValueTypes["ID"] | Variable<any, string>;
1652
+ }, boolean | `@${string}`];
1631
1653
  generateAexolFromText?: [{
1632
1654
  input: ValueTypes["GenerateAexolFromTextInput"] | Variable<any, string>;
1633
1655
  }, ValueTypes["FromTask"]];
@@ -3523,6 +3545,17 @@ export type ResolverInputTypes = {
3523
3545
  updatedAt?: boolean | `@${string}`;
3524
3546
  __typename?: boolean | `@${string}`;
3525
3547
  }>;
3548
+ ["SharedProjectFile"]: AliasType<{
3549
+ name?: boolean | `@${string}`;
3550
+ content?: boolean | `@${string}`;
3551
+ updatedAt?: boolean | `@${string}`;
3552
+ __typename?: boolean | `@${string}`;
3553
+ }>;
3554
+ ["ShareProjectFileResult"]: AliasType<{
3555
+ fileId?: boolean | `@${string}`;
3556
+ token?: boolean | `@${string}`;
3557
+ __typename?: boolean | `@${string}`;
3558
+ }>;
3526
3559
  ["PresetScope"]: PresetScope;
3527
3560
  ["PresetCategory"]: PresetCategory;
3528
3561
  ["CostTier"]: CostTier;
@@ -4001,6 +4034,9 @@ export type ResolverInputTypes = {
4001
4034
  projectId: ResolverInputTypes["ID"];
4002
4035
  filter?: ResolverInputTypes["TeamUsageFilterInput"] | undefined | null;
4003
4036
  }, ResolverInputTypes["ProjectUsage"]];
4037
+ sharedFile?: [{
4038
+ token: string;
4039
+ }, ResolverInputTypes["SharedProjectFile"]];
4004
4040
  fromTask?: [{
4005
4041
  id: ResolverInputTypes["ID"];
4006
4042
  }, ResolverInputTypes["FromTask"]];
@@ -4448,6 +4484,12 @@ export type ResolverInputTypes = {
4448
4484
  deleteProjectFile?: [{
4449
4485
  id: ResolverInputTypes["ID"];
4450
4486
  }, boolean | `@${string}`];
4487
+ shareProjectFile?: [{
4488
+ id: ResolverInputTypes["ID"];
4489
+ }, ResolverInputTypes["ShareProjectFileResult"]];
4490
+ unshareProjectFile?: [{
4491
+ id: ResolverInputTypes["ID"];
4492
+ }, boolean | `@${string}`];
4451
4493
  generateAexolFromText?: [{
4452
4494
  input: ResolverInputTypes["GenerateAexolFromTextInput"];
4453
4495
  }, ResolverInputTypes["FromTask"]];
@@ -6248,6 +6290,15 @@ export type ModelTypes = {
6248
6290
  createdAt: ModelTypes["DateTime"];
6249
6291
  updatedAt: ModelTypes["DateTime"];
6250
6292
  };
6293
+ ["SharedProjectFile"]: {
6294
+ name: string;
6295
+ content: string;
6296
+ updatedAt: ModelTypes["DateTime"];
6297
+ };
6298
+ ["ShareProjectFileResult"]: {
6299
+ fileId: ModelTypes["ID"];
6300
+ token: string;
6301
+ };
6251
6302
  ["PresetScope"]: PresetScope;
6252
6303
  ["PresetCategory"]: PresetCategory;
6253
6304
  ["CostTier"]: CostTier;
@@ -6671,6 +6722,7 @@ export type ModelTypes = {
6671
6722
  project?: ModelTypes["Project"] | undefined | null;
6672
6723
  projects: Array<ModelTypes["Project"]>;
6673
6724
  projectUsage: ModelTypes["ProjectUsage"];
6725
+ sharedFile?: ModelTypes["SharedProjectFile"] | undefined | null;
6674
6726
  fromTask?: ModelTypes["FromTask"] | undefined | null;
6675
6727
  fromTasks: Array<ModelTypes["FromTask"]>;
6676
6728
  presets: Array<ModelTypes["Preset"]>;
@@ -6803,6 +6855,8 @@ export type ModelTypes = {
6803
6855
  createProjectFile: ModelTypes["ProjectFile"];
6804
6856
  updateProjectFile: ModelTypes["ProjectFile"];
6805
6857
  deleteProjectFile: boolean;
6858
+ shareProjectFile: ModelTypes["ShareProjectFileResult"];
6859
+ unshareProjectFile: boolean;
6806
6860
  generateAexolFromText: ModelTypes["FromTask"];
6807
6861
  cancelFromTask: boolean;
6808
6862
  requestCloudDocumentUpload: ModelTypes["CloudDocumentUpload"];
@@ -8305,6 +8359,19 @@ export type GraphQLTypes = {
8305
8359
  updatedAt: GraphQLTypes["DateTime"];
8306
8360
  ['...on ProjectFile']: Omit<GraphQLTypes["ProjectFile"], "...on ProjectFile">;
8307
8361
  };
8362
+ ["SharedProjectFile"]: {
8363
+ __typename: "SharedProjectFile";
8364
+ name: string;
8365
+ content: string;
8366
+ updatedAt: GraphQLTypes["DateTime"];
8367
+ ['...on SharedProjectFile']: Omit<GraphQLTypes["SharedProjectFile"], "...on SharedProjectFile">;
8368
+ };
8369
+ ["ShareProjectFileResult"]: {
8370
+ __typename: "ShareProjectFileResult";
8371
+ fileId: GraphQLTypes["ID"];
8372
+ token: string;
8373
+ ['...on ShareProjectFileResult']: Omit<GraphQLTypes["ShareProjectFileResult"], "...on ShareProjectFileResult">;
8374
+ };
8308
8375
  ["PresetScope"]: PresetScope;
8309
8376
  ["PresetCategory"]: PresetCategory;
8310
8377
  ["CostTier"]: CostTier;
@@ -8775,6 +8842,7 @@ export type GraphQLTypes = {
8775
8842
  project?: GraphQLTypes["Project"] | undefined | null;
8776
8843
  projects: Array<GraphQLTypes["Project"]>;
8777
8844
  projectUsage: GraphQLTypes["ProjectUsage"];
8845
+ sharedFile?: GraphQLTypes["SharedProjectFile"] | undefined | null;
8778
8846
  fromTask?: GraphQLTypes["FromTask"] | undefined | null;
8779
8847
  fromTasks: Array<GraphQLTypes["FromTask"]>;
8780
8848
  presets: Array<GraphQLTypes["Preset"]>;
@@ -8909,6 +8977,8 @@ export type GraphQLTypes = {
8909
8977
  createProjectFile: GraphQLTypes["ProjectFile"];
8910
8978
  updateProjectFile: GraphQLTypes["ProjectFile"];
8911
8979
  deleteProjectFile: boolean;
8980
+ shareProjectFile: GraphQLTypes["ShareProjectFileResult"];
8981
+ unshareProjectFile: boolean;
8912
8982
  generateAexolFromText: GraphQLTypes["FromTask"];
8913
8983
  cancelFromTask: boolean;
8914
8984
  requestCloudDocumentUpload: GraphQLTypes["CloudDocumentUpload"];