whiteboard-mcp-server 2.23.0 → 2.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-client.d.ts +87 -0
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +68 -0
- package/dist/api-client.js.map +1 -1
- package/dist/index.js +169 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/create-ticket.d.ts +2 -2
- package/dist/tools/read-release-guide.d.ts +6 -0
- package/dist/tools/read-release-guide.d.ts.map +1 -0
- package/dist/tools/read-release-guide.js +14 -0
- package/dist/tools/read-release-guide.js.map +1 -0
- package/dist/tools/read-url.d.ts.map +1 -1
- package/dist/tools/read-url.js +7 -2
- package/dist/tools/read-url.js.map +1 -1
- package/dist/tools/sheets.d.ts +147 -0
- package/dist/tools/sheets.d.ts.map +1 -0
- package/dist/tools/sheets.js +225 -0
- package/dist/tools/sheets.js.map +1 -0
- package/dist/tools/update-ticket.d.ts +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const slug = z.string().describe('The slug of the sheet (from list_sheets or its /sheet/<slug> URL)');
|
|
4
|
+
const readZone = {
|
|
5
|
+
tab: z.string().optional().describe('Read only this tab'),
|
|
6
|
+
range: z.string().optional().describe('Read only this range, e.g. "A1:D40" or "Budget!A1:D40"'),
|
|
7
|
+
max_cells: z.number().int().positive().max(20000).optional().describe('Cell budget for this read (default 2000)'),
|
|
8
|
+
};
|
|
9
|
+
async function writable(client, s) {
|
|
10
|
+
const sheet = await client.getSheetBySlug(s);
|
|
11
|
+
if (sheet.permission !== 'write')
|
|
12
|
+
throw new Error(`You only have read access to sheet "${s}".`);
|
|
13
|
+
return sheet;
|
|
14
|
+
}
|
|
15
|
+
function writeReport(r) {
|
|
16
|
+
const lines = [`Applied ${r.applied} operation${r.applied === 1 ? '' : 's'}.${r.rows ? ` Rows written: ${r.rows}.` : ''}`];
|
|
17
|
+
if (r.dropped.length > 0) {
|
|
18
|
+
lines.push('', 'Dropped (re-read the sheet before retrying these):');
|
|
19
|
+
for (const d of r.dropped)
|
|
20
|
+
lines.push(`- ${d.what} — ${d.message}`);
|
|
21
|
+
}
|
|
22
|
+
lines.push('', `New version: ${r.version}`);
|
|
23
|
+
return lines.join('\n');
|
|
24
|
+
}
|
|
25
|
+
export const listSheetsSchema = z.object({
|
|
26
|
+
page: z.number().int().positive().optional(),
|
|
27
|
+
limit: z.number().int().positive().max(50).optional(),
|
|
28
|
+
});
|
|
29
|
+
export async function listSheets(client, input) {
|
|
30
|
+
const workspaceId = client.getActiveWorkspace()?.id || undefined;
|
|
31
|
+
const r = await client.listSheets({ workspaceId, page: input.page, limit: input.limit });
|
|
32
|
+
if (r.items.length === 0)
|
|
33
|
+
return 'No sheets in this workspace.';
|
|
34
|
+
return [`${r.total} sheet(s) (page ${r.page}/${r.totalPages}):`, '', ...r.items.map((s) => `- **${s.title}** — slug \`${s.slug}\` — updated ${new Date(s.updatedAt).toLocaleString()}`)].join('\n');
|
|
35
|
+
}
|
|
36
|
+
export const readSheetSchema = z.object({ slug, ...readZone });
|
|
37
|
+
export async function readSheet(client, input) {
|
|
38
|
+
const sheet = await client.getSheetBySlug(input.slug);
|
|
39
|
+
const r = await client.getSheetContent(sheet.id, { tab: input.tab, range: input.range, maxCells: input.max_cells });
|
|
40
|
+
return `${r.text}\n\n(permission: ${sheet.permission}; pass version "${r.version}" to edit_sheet)`;
|
|
41
|
+
}
|
|
42
|
+
export const checkSheetSchema = z.object({ slug });
|
|
43
|
+
export async function checkSheet(client, input) {
|
|
44
|
+
const sheet = await client.getSheetBySlug(input.slug);
|
|
45
|
+
const r = await client.getSheetVersion(sheet.id);
|
|
46
|
+
return `- **version**: ${r.version}\n- **updated_at**: ${new Date(r.updatedAt).toLocaleString()}`;
|
|
47
|
+
}
|
|
48
|
+
const RESERVED_SLUGS = new Set(['new', 'new-sheet', 'sheet', 'sheets', 'dashboard', 'api', 'admin', 'settings']);
|
|
49
|
+
const MAX_CSV_BYTES = 1024 * 1024;
|
|
50
|
+
const MAX_CELLS = 20000;
|
|
51
|
+
function randomSuffix() {
|
|
52
|
+
return randomBytes(3).toString('hex');
|
|
53
|
+
}
|
|
54
|
+
export function slugify(title) {
|
|
55
|
+
return title.toLowerCase().normalize('NFD').replace(/[̀-ͯ]/g, '').replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
56
|
+
}
|
|
57
|
+
/** Loose estimate of the non-empty cells of a CSV (quote-aware; delimiter guessed from the first line). Errs low. */
|
|
58
|
+
function countCsvCells(csv) {
|
|
59
|
+
const firstLine = csv.split(/\r?\n/, 1)[0] ?? '';
|
|
60
|
+
const delim = [',', ';', '\t'].map((d) => [d, firstLine.split(d).length]).sort((a, b) => b[1] - a[1])[0][0];
|
|
61
|
+
let cells = 0;
|
|
62
|
+
let field = '';
|
|
63
|
+
let quoted = false;
|
|
64
|
+
const flush = () => { if (field.trim() !== '')
|
|
65
|
+
cells++; field = ''; };
|
|
66
|
+
for (let k = 0; k < csv.length; k++) {
|
|
67
|
+
const c = csv[k];
|
|
68
|
+
if (quoted) {
|
|
69
|
+
if (c === '"') {
|
|
70
|
+
if (csv[k + 1] === '"') {
|
|
71
|
+
field += '"';
|
|
72
|
+
k++;
|
|
73
|
+
}
|
|
74
|
+
else
|
|
75
|
+
quoted = false;
|
|
76
|
+
}
|
|
77
|
+
else
|
|
78
|
+
field += c;
|
|
79
|
+
}
|
|
80
|
+
else if (c === '"' && field === '')
|
|
81
|
+
quoted = true;
|
|
82
|
+
else if (c === delim)
|
|
83
|
+
flush();
|
|
84
|
+
else if (c === '\n' || c === '\r') {
|
|
85
|
+
flush();
|
|
86
|
+
if (c === '\r' && csv[k + 1] === '\n')
|
|
87
|
+
k++;
|
|
88
|
+
}
|
|
89
|
+
else
|
|
90
|
+
field += c;
|
|
91
|
+
}
|
|
92
|
+
flush();
|
|
93
|
+
return cells;
|
|
94
|
+
}
|
|
95
|
+
function validateTabs(tabs) {
|
|
96
|
+
const seen = new Set();
|
|
97
|
+
let cells = 0;
|
|
98
|
+
for (const tab of tabs) {
|
|
99
|
+
const key = tab.name.toLowerCase();
|
|
100
|
+
if (seen.has(key))
|
|
101
|
+
throw new Error(`Tab name "${tab.name}" is used twice (tab names are unique, case-insensitively).`);
|
|
102
|
+
seen.add(key);
|
|
103
|
+
if (tab.name.length > 31)
|
|
104
|
+
throw new Error(`Tab name "${tab.name}" is longer than 31 characters.`);
|
|
105
|
+
if (/[\[\]:*?\/\\]/.test(tab.name))
|
|
106
|
+
throw new Error(`Tab name "${tab.name}" contains a forbidden character (none of [ ] : * ? / \\).`);
|
|
107
|
+
if (tab.name.startsWith('__'))
|
|
108
|
+
throw new Error(`Tab name "${tab.name}" must not start with "__".`);
|
|
109
|
+
if (tab.csv) {
|
|
110
|
+
if (Buffer.byteLength(tab.csv, 'utf8') > MAX_CSV_BYTES)
|
|
111
|
+
throw new Error(`The CSV of tab "${tab.name}" is over 1 MB.`);
|
|
112
|
+
cells += countCsvCells(tab.csv);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (cells > MAX_CELLS)
|
|
116
|
+
throw new Error(`The tabs hold about ${cells} non-empty cells; the limit is ${MAX_CELLS} in total across all tabs.`);
|
|
117
|
+
}
|
|
118
|
+
export const createSheetSchema = z.object({
|
|
119
|
+
title: z.string().trim().min(1).describe('Title of the new sheet'),
|
|
120
|
+
slug: z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).optional().describe('URL slug (default: derived from the title)'),
|
|
121
|
+
tabs: z.array(z.object({ name: z.string().trim().min(1), csv: z.string().optional() })).optional()
|
|
122
|
+
.describe('Initial tabs, in order, each with optional CSV content (formulas like =SUM(B2:B9) are kept as formulas)'),
|
|
123
|
+
});
|
|
124
|
+
export async function createSheet(client, input, frontendUrl) {
|
|
125
|
+
if (input.tabs)
|
|
126
|
+
validateTabs(input.tabs);
|
|
127
|
+
const workspaceId = (await client.getDefaultWorkspaceId()) ?? undefined;
|
|
128
|
+
const derived = input.slug === undefined;
|
|
129
|
+
let s = input.slug ?? slugify(input.title);
|
|
130
|
+
if (derived && (s === '' || RESERVED_SLUGS.has(s)))
|
|
131
|
+
s = `${s || 'sheet'}-${randomSuffix()}`;
|
|
132
|
+
let sheet;
|
|
133
|
+
try {
|
|
134
|
+
sheet = await client.createSheet({ slug: s, title: input.title, workspaceId });
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
if (derived && e instanceof Error && e.message.includes('API error 409')) {
|
|
138
|
+
sheet = await client.createSheet({ slug: `${s}-${randomSuffix()}`, title: input.title, workspaceId });
|
|
139
|
+
}
|
|
140
|
+
else
|
|
141
|
+
throw e;
|
|
142
|
+
}
|
|
143
|
+
const url = `${frontendUrl}/sheet/${sheet.slug}`;
|
|
144
|
+
let report = '';
|
|
145
|
+
if (input.tabs && input.tabs.length > 0) {
|
|
146
|
+
try {
|
|
147
|
+
const { version } = await client.getSheetVersion(sheet.id);
|
|
148
|
+
const operations = [];
|
|
149
|
+
input.tabs.forEach((tab, i) => {
|
|
150
|
+
if (i === 0) {
|
|
151
|
+
if (tab.name !== 'Sheet1')
|
|
152
|
+
operations.push({ op: 'rename_tab', from: 'Sheet1', to: tab.name });
|
|
153
|
+
}
|
|
154
|
+
else
|
|
155
|
+
operations.push({ op: 'add_tab', name: tab.name });
|
|
156
|
+
if (tab.csv)
|
|
157
|
+
operations.push({ op: 'fill', at: `'${tab.name.replace(/'/g, "''")}'!A1`, csv: tab.csv });
|
|
158
|
+
});
|
|
159
|
+
report = `\n\n${writeReport(await client.editSheet(sheet.id, { version, operations }))}`;
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
163
|
+
throw new Error(`Sheet "${sheet.slug}" was created (${url}) but is empty: its initial content was rejected: ${msg}. Fill it with edit_sheet, or remove it with delete_sheet.`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return `Created sheet **${sheet.title}** (slug \`${sheet.slug}\`): ${url}${report}`;
|
|
167
|
+
}
|
|
168
|
+
export const editSheetSchema = z.object({
|
|
169
|
+
slug,
|
|
170
|
+
version: z.string().describe('The version read_sheet or check_sheet returned, e.g. "3:1044"'),
|
|
171
|
+
operations: z.array(z.record(z.unknown())).min(1).describe('The batch, applied atomically — see the tool description'),
|
|
172
|
+
});
|
|
173
|
+
export async function editSheet(client, input) {
|
|
174
|
+
const sheet = await writable(client, input.slug);
|
|
175
|
+
return writeReport(await client.editSheet(sheet.id, { version: input.version, operations: input.operations }));
|
|
176
|
+
}
|
|
177
|
+
export const appendRowsSchema = z.object({
|
|
178
|
+
slug,
|
|
179
|
+
tab: z.string().optional().describe('Tab to append to (default: the first tab)'),
|
|
180
|
+
rows: z.array(z.array(z.string())).min(1).describe('Rows to add under the last used row; each row is an array of cell inputs'),
|
|
181
|
+
});
|
|
182
|
+
export async function appendRows(client, input) {
|
|
183
|
+
const sheet = await writable(client, input.slug);
|
|
184
|
+
return writeReport(await client.appendSheetRows(sheet.id, { tab: input.tab, rows: input.rows }));
|
|
185
|
+
}
|
|
186
|
+
export const deleteSheetSchema = z.object({ slug });
|
|
187
|
+
export async function deleteSheet(client, input) {
|
|
188
|
+
const sheet = await writable(client, input.slug);
|
|
189
|
+
await client.deleteSheet(sheet.id);
|
|
190
|
+
return `Deleted sheet "${input.slug}".`;
|
|
191
|
+
}
|
|
192
|
+
export const sheetHistorySchema = z.object({
|
|
193
|
+
slug,
|
|
194
|
+
since_version: z.string().optional().describe('Only what happened after this version'),
|
|
195
|
+
limit: z.number().int().positive().max(200).optional().describe('Most recent entries to show (default 50)'),
|
|
196
|
+
});
|
|
197
|
+
export async function sheetHistory(client, input) {
|
|
198
|
+
const sheet = await client.getSheetBySlug(input.slug);
|
|
199
|
+
return (await client.getSheetHistory(sheet.id, { since: input.since_version, limit: input.limit })).text;
|
|
200
|
+
}
|
|
201
|
+
export const listSheetVersionsSchema = z.object({ slug });
|
|
202
|
+
export async function listSheetVersions(client, input) {
|
|
203
|
+
const sheet = await client.getSheetBySlug(input.slug);
|
|
204
|
+
const versions = await client.listSheetVersions(sheet.id);
|
|
205
|
+
if (versions.length === 0)
|
|
206
|
+
return `No saved versions for sheet "${input.slug}" yet.`;
|
|
207
|
+
return [`Saved versions of **${input.slug}**:`, '', ...versions.map((v) => {
|
|
208
|
+
const label = v.name ? `**v${v.versionNumber}** "${v.name}"` : `**v${v.versionNumber}**`;
|
|
209
|
+
const restored = v.restoredFromVersionNumber ? ` (restored from v${v.restoredFromVersionNumber})` : '';
|
|
210
|
+
return `- ${label} — ${new Date(v.createdAt).toLocaleString()} by ${v.createdBy?.name ?? 'Unknown'}${restored} — id \`${v.id}\``;
|
|
211
|
+
})].join('\n');
|
|
212
|
+
}
|
|
213
|
+
export const readSheetVersionSchema = z.object({
|
|
214
|
+
slug,
|
|
215
|
+
version_number: z.number().int().positive().describe('The saved version number, from list_sheet_versions'),
|
|
216
|
+
...readZone,
|
|
217
|
+
});
|
|
218
|
+
export async function readSheetVersion(client, input) {
|
|
219
|
+
const sheet = await client.getSheetBySlug(input.slug);
|
|
220
|
+
const v = (await client.listSheetVersions(sheet.id)).find((x) => x.versionNumber === input.version_number);
|
|
221
|
+
if (!v)
|
|
222
|
+
throw new Error(`Sheet "${input.slug}" has no saved version ${input.version_number}.`);
|
|
223
|
+
return (await client.getSheetVersionContent(sheet.id, v.id, { tab: input.tab, range: input.range, maxCells: input.max_cells })).text;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=sheets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheets.js","sourceRoot":"","sources":["../../src/tools/sheets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC,CAAC;AACtG,MAAM,QAAQ,GAAG;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CAClH,CAAC;AAEF,KAAK,UAAU,QAAQ,CAAC,MAAiB,EAAE,CAAS;IAClD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,IAAI,CAAC,CAAC;IAChG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,CAAmB;IACtC,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3H,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,oDAAoD,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB,EAAE,KAAuC;IACzF,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,SAAS,CAAC;IACjE,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,IAAI,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtM,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AAC/D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAiB,EAAE,KAAsC;IACvF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACpH,OAAO,GAAG,CAAC,CAAC,IAAI,oBAAoB,KAAK,CAAC,UAAU,mBAAmB,CAAC,CAAC,OAAO,kBAAkB,CAAC;AACrG,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB,EAAE,KAAuC;IACzF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,kBAAkB,CAAC,CAAC,OAAO,uBAAuB,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;AACpG,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACjH,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAClC,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,SAAS,YAAY;IACnB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACxH,CAAC;AAED,qHAAqH;AACrH,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrH,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,KAAK,IAAI,GAAG,CAAC;oBAAC,CAAC,EAAE,CAAC;gBAAC,CAAC;;oBAAM,MAAM,GAAG,KAAK,CAAC;YAAC,CAAC;;gBACjF,KAAK,IAAI,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,KAAK,EAAE;YAAE,MAAM,GAAG,IAAI,CAAC;aAC/C,IAAI,CAAC,KAAK,KAAK;YAAE,KAAK,EAAE,CAAC;aACzB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,CAAC,EAAE,CAAC;QAAC,CAAC;;YACtF,KAAK,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,IAAsC;IAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,6DAA6D,CAAC,CAAC;QACvH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,iCAAiC,CAAC,CAAC;QAClG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,4DAA4D,CAAC,CAAC;QACvI,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,6BAA6B,CAAC,CAAC;QACnG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC;YACtH,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,IAAI,KAAK,GAAG,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,kCAAkC,SAAS,4BAA4B,CAAC,CAAC;AAC9I,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACtH,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC/F,QAAQ,CAAC,yGAAyG,CAAC;CACvH,CAAC,CAAC;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAiB,EAAE,KAAwC,EAAE,WAAmB;IAChH,IAAI,KAAK,CAAC,IAAI;QAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAC,IAAI,SAAS,CAAC;IACxE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;IACzC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,IAAI,YAAY,EAAE,EAAE,CAAC;IAC5F,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACzE,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACxG,CAAC;;YAAM,MAAM,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,WAAW,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAc,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;wBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;;oBAC3G,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACxD,IAAI,GAAG,CAAC,GAAG;oBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACzG,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,OAAO,WAAW,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,kBAAkB,GAAG,qDAAqD,GAAG,4DAA4D,CAAC,CAAC;QACjL,CAAC;IACH,CAAC;IACD,OAAO,mBAAmB,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC,IAAI,QAAQ,GAAG,GAAG,MAAM,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI;IACJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IAC7F,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC;CACvH,CAAC,CAAC;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAiB,EAAE,KAAsC;IACvF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,WAAW,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI;IACJ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAChF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0EAA0E,CAAC;CAC/H,CAAC,CAAC;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB,EAAE,KAAuC;IACzF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,WAAW,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAiB,EAAE,KAAwC;IAC3F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,kBAAkB,KAAK,CAAC,IAAI,IAAI,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI;IACJ,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CAC5G,CAAC,CAAC;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAiB,EAAE,KAAyC;IAC7F,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3G,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAA8C;IACvG,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,gCAAgC,KAAK,CAAC,IAAI,QAAQ,CAAC;IACrF,OAAO,CAAC,uBAAuB,KAAK,CAAC,IAAI,KAAK,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxE,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,IAAI,CAAC;YACzF,MAAM,QAAQ,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvG,OAAO,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,IAAI,IAAI,SAAS,GAAG,QAAQ,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC;QACnI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI;IACJ,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC1G,GAAG,QAAQ;CACZ,CAAC,CAAC;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB,EAAE,KAA6C;IACrG,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3G,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,0BAA0B,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;IAC/F,OAAO,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvI,CAAC"}
|
|
@@ -38,11 +38,11 @@ export declare const updateTicketSchema: z.ZodObject<{
|
|
|
38
38
|
color?: string | undefined;
|
|
39
39
|
}[] | undefined;
|
|
40
40
|
status?: "idea" | "backlog" | "todo" | "doing" | "done" | "wont" | "closed" | undefined;
|
|
41
|
+
title?: string | undefined;
|
|
41
42
|
vertical?: {
|
|
42
43
|
label: string;
|
|
43
44
|
color?: string | undefined;
|
|
44
45
|
} | null | undefined;
|
|
45
|
-
title?: string | undefined;
|
|
46
46
|
description?: string | undefined;
|
|
47
47
|
priority?: "low" | "medium" | "high" | "critical" | undefined;
|
|
48
48
|
assigneeId?: string | null | undefined;
|
|
@@ -57,11 +57,11 @@ export declare const updateTicketSchema: z.ZodObject<{
|
|
|
57
57
|
color?: string | undefined;
|
|
58
58
|
}[] | undefined;
|
|
59
59
|
status?: "idea" | "backlog" | "todo" | "doing" | "done" | "wont" | "closed" | undefined;
|
|
60
|
+
title?: string | undefined;
|
|
60
61
|
vertical?: {
|
|
61
62
|
label: string;
|
|
62
63
|
color?: string | undefined;
|
|
63
64
|
} | null | undefined;
|
|
64
|
-
title?: string | undefined;
|
|
65
65
|
description?: string | undefined;
|
|
66
66
|
priority?: "low" | "medium" | "high" | "critical" | undefined;
|
|
67
67
|
assigneeId?: string | null | undefined;
|