stitchkit 0.116.0 → 0.117.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.
Files changed (120) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/agent-runtime/run-acquisition.d.ts +9 -2
  3. package/dist/agent-runtime/run-acquisition.d.ts.map +1 -1
  4. package/dist/agent-runtime/run-execution.d.ts +3 -0
  5. package/dist/agent-runtime/run-execution.d.ts.map +1 -1
  6. package/dist/agent-runtime/run-failure.d.ts +4 -1
  7. package/dist/agent-runtime/run-failure.d.ts.map +1 -1
  8. package/dist/agent-runtime/run-store-retry.d.ts +8 -0
  9. package/dist/agent-runtime/run-store-retry.d.ts.map +1 -0
  10. package/dist/agent-runtime/run-terminal.d.ts.map +1 -1
  11. package/dist/agent-runtime/run-unacquired.d.ts +19 -0
  12. package/dist/agent-runtime/run-unacquired.d.ts.map +1 -0
  13. package/dist/agent-runtime/store-conformance.d.ts +8 -0
  14. package/dist/agent-runtime/store-conformance.d.ts.map +1 -1
  15. package/dist/agent-runtime/store-driver-contract.d.ts +5 -0
  16. package/dist/agent-runtime/store-driver-contract.d.ts.map +1 -1
  17. package/dist/agent-runtime/terminal-commit.d.ts +34 -4
  18. package/dist/agent-runtime/terminal-commit.d.ts.map +1 -1
  19. package/dist/entrypoints/agent-runtime/harness.js +2 -2
  20. package/dist/entrypoints/agent-runtime/sqlite/bun.js +3 -3
  21. package/dist/entrypoints/agent-runtime/sqlite/node.js +3 -3
  22. package/dist/entrypoints/agent-runtime/testing.js +22 -4
  23. package/dist/entrypoints/agent-runtime.d.ts +1 -1
  24. package/dist/entrypoints/agent-runtime.d.ts.map +1 -1
  25. package/dist/entrypoints/agent-runtime.js +13 -11
  26. package/dist/entrypoints/application/diagnostic-journal.js +1 -1
  27. package/dist/entrypoints/application/directory-inbox.js +3 -3
  28. package/dist/entrypoints/cli/publish.js +2 -2
  29. package/dist/entrypoints/files.js +2 -2
  30. package/dist/entrypoints/primitives.js +51 -154
  31. package/dist/entrypoints/server.js +6 -6
  32. package/dist/entrypoints/telegram.d.ts +1 -1
  33. package/dist/entrypoints/telegram.d.ts.map +1 -1
  34. package/dist/entrypoints/telegram.js +196 -76
  35. package/dist/entrypoints/tracking/contract.d.ts +11 -0
  36. package/dist/entrypoints/tracking/contract.d.ts.map +1 -0
  37. package/dist/entrypoints/tracking/contract.js +162 -0
  38. package/dist/entrypoints/tracking/performance.d.ts +8 -0
  39. package/dist/entrypoints/tracking/performance.d.ts.map +1 -0
  40. package/dist/entrypoints/tracking/performance.js +181 -0
  41. package/dist/entrypoints/tracking/server.d.ts +1 -0
  42. package/dist/entrypoints/tracking/server.d.ts.map +1 -1
  43. package/dist/entrypoints/tracking/server.js +40 -12
  44. package/dist/entrypoints/tracking.d.ts +4 -3
  45. package/dist/entrypoints/tracking.d.ts.map +1 -1
  46. package/dist/entrypoints/tracking.js +43 -143
  47. package/dist/entrypoints/xlsx.d.ts +4 -0
  48. package/dist/entrypoints/xlsx.d.ts.map +1 -0
  49. package/dist/entrypoints/xlsx.js +406 -0
  50. package/dist/{index-fa435yq2.js → index-073nw9qr.js} +8 -8
  51. package/dist/index-1f40z584.js +7 -0
  52. package/dist/{index-fdk4r4r6.js → index-75ns2ybj.js} +1 -1
  53. package/dist/{index-jq2ky8fw.js → index-cycp3r3e.js} +124 -181
  54. package/dist/{index-4g6qmgdx.js → index-ghtpfz4z.js} +9 -9
  55. package/dist/{index-n3v695sb.js → index-hdjmdwsj.js} +277 -96
  56. package/dist/{index-zqkz4af9.js → index-nqxrm176.js} +1 -1
  57. package/dist/index-qezhmp51.js +242 -0
  58. package/dist/index-vv1sch8a.js +94 -0
  59. package/dist/{index-fggxgbrk.js → index-xx1j310k.js} +165 -102
  60. package/dist/internal/exclusive-lock.d.ts.map +1 -1
  61. package/dist/primitives/decimal.d.ts +10 -0
  62. package/dist/primitives/decimal.d.ts.map +1 -1
  63. package/dist/primitives/index.d.ts +3 -1
  64. package/dist/primitives/index.d.ts.map +1 -1
  65. package/dist/primitives/money.d.ts +20 -0
  66. package/dist/primitives/money.d.ts.map +1 -1
  67. package/dist/primitives/quantity.d.ts.map +1 -1
  68. package/dist/primitives/rounding.d.ts +40 -0
  69. package/dist/primitives/rounding.d.ts.map +1 -0
  70. package/dist/telegram/budget-transformer.d.ts +2 -2
  71. package/dist/telegram/not-dispatched.d.ts +2 -2
  72. package/dist/telegram/not-dispatched.d.ts.map +1 -1
  73. package/dist/telegram/outbound-budget.d.ts +53 -16
  74. package/dist/telegram/outbound-budget.d.ts.map +1 -1
  75. package/dist/telegram/outbound-cost.d.ts +5 -0
  76. package/dist/telegram/outbound-cost.d.ts.map +1 -0
  77. package/dist/telegram/outbound-pauses.d.ts +17 -0
  78. package/dist/telegram/outbound-pauses.d.ts.map +1 -0
  79. package/dist/telegram/outbound-queue.d.ts +17 -0
  80. package/dist/telegram/outbound-queue.d.ts.map +1 -0
  81. package/dist/tracking/attribution.d.ts +1 -1
  82. package/dist/tracking/attribution.d.ts.map +1 -1
  83. package/dist/tracking/client-visit.d.ts +3 -1
  84. package/dist/tracking/client-visit.d.ts.map +1 -1
  85. package/dist/tracking/client.d.ts.map +1 -1
  86. package/dist/tracking/performance/collector.d.ts +61 -0
  87. package/dist/tracking/performance/collector.d.ts.map +1 -0
  88. package/dist/tracking/performance/schema.d.ts +45 -0
  89. package/dist/tracking/performance/schema.d.ts.map +1 -0
  90. package/dist/tracking/performance/summary.d.ts +12 -0
  91. package/dist/tracking/performance/summary.d.ts.map +1 -0
  92. package/dist/tracking/privacy.d.ts +5 -0
  93. package/dist/tracking/privacy.d.ts.map +1 -0
  94. package/dist/tracking/server/telemetry-health.d.ts +31 -0
  95. package/dist/tracking/server/telemetry-health.d.ts.map +1 -0
  96. package/dist/xlsx/cells.d.ts +17 -0
  97. package/dist/xlsx/cells.d.ts.map +1 -0
  98. package/dist/xlsx/render.d.ts +11 -0
  99. package/dist/xlsx/render.d.ts.map +1 -0
  100. package/dist/xlsx/schema.d.ts +119 -0
  101. package/dist/xlsx/schema.d.ts.map +1 -0
  102. package/dist/xlsx/zip.d.ts +13 -0
  103. package/dist/xlsx/zip.d.ts.map +1 -0
  104. package/llms/agent-runtime.2.txt +40 -16
  105. package/llms/agent-runtime.3.txt +17 -0
  106. package/llms/agent-runtime.txt +4 -1
  107. package/llms/primitives.txt +21 -0
  108. package/llms/stitchkit.txt +9 -6
  109. package/llms/telegram.txt +32 -12
  110. package/llms/tracking-contract.txt +32 -0
  111. package/llms/tracking-performance.txt +21 -0
  112. package/llms/tracking-server.txt +1 -0
  113. package/llms/tracking.txt +75 -12
  114. package/llms/{upgrading-0.105.0-0.116.0.txt → upgrading-0.105.0-0.117.0.txt} +50 -3
  115. package/llms/upgrading.txt +1 -1
  116. package/llms/xlsx.txt +107 -0
  117. package/llms-full.txt +355 -31
  118. package/llms.txt +11 -7
  119. package/package.json +27 -9
  120. package/dist/{index-z3d6smer.js → index-tdpmfks8.js} +5 -5
@@ -0,0 +1,406 @@
1
+ import {
2
+ DecimalInputSchema2,
3
+ moneyToDecimal2
4
+ } from "../index-qezhmp51.js";
5
+
6
+ // src/xlsx/cells.ts
7
+ import { z } from "zod";
8
+ var EXCEL_DIGITS = 15;
9
+ var MAX_TEXT = 32767;
10
+ var MS_PER_DAY = 86400000;
11
+ var EXCEL_EPOCH_DAY = -25569;
12
+ var FIRST_RELIABLE_DAY = Date.UTC(1900, 2, 1) / MS_PER_DAY;
13
+ var LAST_DAY = Date.UTC(9999, 11, 31) / MS_PER_DAY;
14
+ var InstantSchema = z.iso.datetime({ offset: true });
15
+
16
+ class XlsxCellError extends TypeError {
17
+ name = "XlsxCellError";
18
+ }
19
+ function refuse(where, expected) {
20
+ throw new XlsxCellError(`${where}: expected ${expected}`);
21
+ }
22
+ function exactNumber(value, where) {
23
+ const digits = value.replace(/^-|\./g, "").replace(/^0+/, "").replace(/0+$/, "");
24
+ if (digits.length > EXCEL_DIGITS) {
25
+ throw new XlsxCellError(`${where}: ${value} has more significant digits than Excel keeps (${EXCEL_DIGITS})`);
26
+ }
27
+ const stored = Number(value);
28
+ if (!Number.isFinite(stored) || stored === 0 && digits !== "") {
29
+ throw new XlsxCellError(`${where}: ${value} is outside what Excel can hold`);
30
+ }
31
+ return value;
32
+ }
33
+ function numberCell(value, where) {
34
+ if (typeof value === "number") {
35
+ if (!Number.isFinite(value))
36
+ refuse(where, "a finite number");
37
+ return { kind: "number", value: String(value) };
38
+ }
39
+ const text = typeof value === "bigint" ? value.toString() : value;
40
+ const parsed = DecimalInputSchema2.safeParse(text);
41
+ if (!parsed.success)
42
+ refuse(where, "a number or a decimal string");
43
+ return { kind: "number", value: exactNumber(parsed.data, where) };
44
+ }
45
+ function isMoney(value) {
46
+ return typeof value === "object" && value !== null && /^-?(?:0|[1-9]\d*)$/.test(String(Reflect.get(value, "minor"))) && typeof Reflect.get(value, "minor") === "string" && typeof Reflect.get(value, "currency") === "string";
47
+ }
48
+ function moneyCell(value, column, where) {
49
+ if (!isMoney(value))
50
+ return refuse(where, `Money in ${column.currency}`);
51
+ if (value.currency !== column.currency) {
52
+ return refuse(where, `Money in ${column.currency}, not ${value.currency}`);
53
+ }
54
+ return {
55
+ kind: "number",
56
+ value: exactNumber(moneyToDecimal2(value, column.scale), where)
57
+ };
58
+ }
59
+ function dateCell(value, where) {
60
+ const match = typeof value === "string" ? /^(\d{4})-(\d{2})-(\d{2})$/.exec(value) : null;
61
+ if (!match)
62
+ return refuse(where, "a date as YYYY-MM-DD");
63
+ const [, year, month, day] = match;
64
+ const time = Date.UTC(Number(year), Number(month) - 1, Number(day));
65
+ if (new Date(time).toISOString().slice(0, 10) !== value) {
66
+ return refuse(where, "a calendar date that exists");
67
+ }
68
+ const unixDay = time / MS_PER_DAY;
69
+ if (unixDay < FIRST_RELIABLE_DAY)
70
+ return refuse(where, "a date from 1900-03-01");
71
+ return { kind: "number", value: String(unixDay - EXCEL_EPOCH_DAY) };
72
+ }
73
+ function instantOf(value) {
74
+ if (value instanceof Date)
75
+ return value.getTime();
76
+ return InstantSchema.safeParse(value).success ? Date.parse(String(value)) : undefined;
77
+ }
78
+ var wallClocks = new Map;
79
+ function wallClockIn(timeZone) {
80
+ const known = wallClocks.get(timeZone);
81
+ if (known)
82
+ return known;
83
+ const created = new Intl.DateTimeFormat("en-US", {
84
+ timeZone,
85
+ hourCycle: "h23",
86
+ year: "numeric",
87
+ month: "numeric",
88
+ day: "numeric",
89
+ hour: "numeric",
90
+ minute: "numeric",
91
+ second: "numeric"
92
+ });
93
+ wallClocks.set(timeZone, created);
94
+ return created;
95
+ }
96
+ function datetimeCell(value, column, where) {
97
+ const instant = instantOf(value);
98
+ if (instant === undefined || Number.isNaN(instant)) {
99
+ return refuse(where, "a Date or an ISO instant with an offset");
100
+ }
101
+ if (instant / MS_PER_DAY < FIRST_RELIABLE_DAY || instant / MS_PER_DAY >= LAST_DAY) {
102
+ return refuse(where, "an instant from 1900-03-01 to 9999-12-30");
103
+ }
104
+ const fields = wallClockIn(column.timeZone).formatToParts(instant);
105
+ const field = (type) => Number(fields.find((part) => part.type === type)?.value);
106
+ const wallClock = Date.UTC(field("year"), field("month") - 1, field("day"), field("hour"), field("minute"), field("second"));
107
+ if (wallClock / MS_PER_DAY < FIRST_RELIABLE_DAY) {
108
+ return refuse(where, "an instant from 1900-03-01 in its time zone");
109
+ }
110
+ return { kind: "number", value: String(wallClock / MS_PER_DAY - EXCEL_EPOCH_DAY) };
111
+ }
112
+ function cellOf(value, column, where) {
113
+ switch (column.type) {
114
+ case "text":
115
+ if (typeof value !== "string")
116
+ return refuse(where, "text");
117
+ if (value.length > MAX_TEXT)
118
+ return refuse(where, `at most ${MAX_TEXT} characters`);
119
+ return { kind: "text", value };
120
+ case "number":
121
+ return numberCell(value, where);
122
+ case "money":
123
+ return moneyCell(value, column, where);
124
+ case "date":
125
+ return dateCell(value, where);
126
+ case "datetime":
127
+ return datetimeCell(value, column, where);
128
+ case "boolean":
129
+ if (typeof value !== "boolean")
130
+ return refuse(where, "a boolean");
131
+ return { kind: "boolean", value };
132
+ }
133
+ }
134
+ // src/xlsx/schema.ts
135
+ import { z as z2 } from "zod";
136
+ var ColumnBase = {
137
+ key: z2.string().min(1),
138
+ header: z2.string().min(1),
139
+ width: z2.number().positive().max(255).optional()
140
+ };
141
+ var TimeZoneSchema = z2.string().refine((zone) => {
142
+ try {
143
+ new Intl.DateTimeFormat("en", { timeZone: zone });
144
+ return true;
145
+ } catch {
146
+ return false;
147
+ }
148
+ }, "expected an IANA time zone");
149
+ var XlsxColumnSchema = z2.discriminatedUnion("type", [
150
+ z2.object({ ...ColumnBase, type: z2.literal("text") }),
151
+ z2.object({
152
+ ...ColumnBase,
153
+ type: z2.literal("number"),
154
+ format: z2.string().min(1).optional()
155
+ }),
156
+ z2.object({ ...ColumnBase, type: z2.literal("date") }),
157
+ z2.object({ ...ColumnBase, type: z2.literal("datetime"), timeZone: TimeZoneSchema }),
158
+ z2.object({
159
+ ...ColumnBase,
160
+ type: z2.literal("money"),
161
+ currency: z2.string().regex(/^[\p{L}\p{Sc}\d .]{1,12}$/u),
162
+ scale: z2.number().int().min(0).max(6)
163
+ }),
164
+ z2.object({ ...ColumnBase, type: z2.literal("boolean") })
165
+ ]);
166
+ var SHEET_NAME = /^(?!')[^\p{Cc}[\]:*?/\\\ufffe\uffff]{1,31}(?<!')$/u;
167
+ var XlsxSheetSchema = z2.object({
168
+ name: z2.string().regex(SHEET_NAME, "expected a sheet name Excel accepts").max(31).refine((name) => name.toLowerCase() !== "history", "Excel keeps the name History"),
169
+ columns: z2.array(XlsxColumnSchema).min(1).max(16384).readonly(),
170
+ rows: z2.array(z2.record(z2.string(), z2.unknown())).max(1048575).readonly()
171
+ });
172
+ var XlsxWorkbookSchema = z2.object({
173
+ sheets: z2.array(XlsxSheetSchema).min(1).refine((sheets) => new Set(sheets.map((sheet) => sheet.name.toLowerCase())).size === sheets.length, "sheet names must differ, ignoring case").readonly()
174
+ });
175
+
176
+ // src/xlsx/zip.ts
177
+ var DOS_EPOCH_DATE = 33;
178
+ var VERSION = 20;
179
+ var UTF8_NAMES = 2048;
180
+ var DEFLATE = 8;
181
+ var CRC_TABLE = Uint32Array.from({ length: 256 }, (_, index) => {
182
+ let value = index;
183
+ for (let bit = 0;bit < 8; bit += 1) {
184
+ value = value & 1 ? 3988292384 ^ value >>> 1 : value >>> 1;
185
+ }
186
+ return value >>> 0;
187
+ });
188
+ function crc32(bytes) {
189
+ let crc = 4294967295;
190
+ for (const byte of bytes) {
191
+ crc = (CRC_TABLE[(crc ^ byte) & 255] ?? 0) ^ crc >>> 8;
192
+ }
193
+ return (crc ^ 4294967295) >>> 0;
194
+ }
195
+ async function deflate(bytes) {
196
+ const stream = new Blob([bytes]).stream().pipeThrough(new CompressionStream("deflate-raw"));
197
+ return new Uint8Array(await new Response(stream).arrayBuffer());
198
+ }
199
+ function record(length, write) {
200
+ const buffer = new Uint8Array(length);
201
+ const view = new DataView(buffer.buffer);
202
+ let offset = 0;
203
+ write({
204
+ u16(value) {
205
+ view.setUint16(offset, value, true);
206
+ offset += 2;
207
+ },
208
+ u32(value) {
209
+ view.setUint32(offset, value, true);
210
+ offset += 4;
211
+ },
212
+ bytes(value) {
213
+ buffer.set(value, offset);
214
+ offset += value.byteLength;
215
+ }
216
+ });
217
+ return buffer;
218
+ }
219
+ async function zip(entries) {
220
+ const encoder = new TextEncoder;
221
+ const parts = [];
222
+ const directory = [];
223
+ let offset = 0;
224
+ for (const entry of entries) {
225
+ const name = encoder.encode(entry.name);
226
+ const content = encoder.encode(entry.content);
227
+ const compressed = await deflate(content);
228
+ const crc = crc32(content);
229
+ const common = (fields) => {
230
+ fields.u16(VERSION);
231
+ fields.u16(UTF8_NAMES);
232
+ fields.u16(DEFLATE);
233
+ fields.u16(0);
234
+ fields.u16(DOS_EPOCH_DATE);
235
+ fields.u32(crc);
236
+ fields.u32(compressed.byteLength);
237
+ fields.u32(content.byteLength);
238
+ fields.u16(name.byteLength);
239
+ fields.u16(0);
240
+ };
241
+ const local = record(30 + name.byteLength, (fields) => {
242
+ fields.u32(67324752);
243
+ common(fields);
244
+ fields.bytes(name);
245
+ });
246
+ directory.push(record(46 + name.byteLength, (fields) => {
247
+ fields.u32(33639248);
248
+ fields.u16(VERSION);
249
+ common(fields);
250
+ fields.u16(0);
251
+ fields.u16(0);
252
+ fields.u16(0);
253
+ fields.u32(0);
254
+ fields.u32(offset);
255
+ fields.bytes(name);
256
+ }));
257
+ parts.push(local, compressed);
258
+ offset += local.byteLength + compressed.byteLength;
259
+ }
260
+ const directorySize = directory.reduce((total, part) => total + part.byteLength, 0);
261
+ const end = record(22, (fields) => {
262
+ fields.u32(101010256);
263
+ fields.u16(0);
264
+ fields.u16(0);
265
+ fields.u16(entries.length);
266
+ fields.u16(entries.length);
267
+ fields.u32(directorySize);
268
+ fields.u32(offset);
269
+ fields.u16(0);
270
+ });
271
+ const all = [...parts, ...directory, end];
272
+ const bytes = new Uint8Array(all.reduce((total, part) => total + part.byteLength, 0));
273
+ let position = 0;
274
+ for (const part of all) {
275
+ bytes.set(part, position);
276
+ position += part.byteLength;
277
+ }
278
+ return bytes;
279
+ }
280
+
281
+ // src/xlsx/render.ts
282
+ var XLSX_MEDIA_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
283
+ var SPREADSHEET = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
284
+ var RELATIONSHIPS = "http://schemas.openxmlformats.org/package/2006/relationships";
285
+ var OFFICE_RELATIONSHIPS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
286
+ var XML_DECLARATION = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
287
+ `;
288
+ var FORMULA_START = /^[=+\-@]/;
289
+ var STYLE_HEADER = 1;
290
+ var STYLE_LITERAL_TEXT = 2;
291
+ var FIRST_CUSTOM_STYLE = 3;
292
+ var FIRST_CUSTOM_FORMAT = 164;
293
+ function escapeXml(value) {
294
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;");
295
+ }
296
+ function escapeText(value) {
297
+ return escapeXml(value.replace(/_(?=x[0-9A-Fa-f]{4}_)/g, "_x005F_").replace(/[\u0000-\u0008\u000b-\u001f￾￿]/g, (character) => `_x${character.charCodeAt(0).toString(16).padStart(4, "0")}_`));
298
+ }
299
+ function columnName(index) {
300
+ let name = "";
301
+ for (let rest = index + 1;rest > 0; rest = Math.floor((rest - 1) / 26)) {
302
+ name = String.fromCharCode(65 + (rest - 1) % 26) + name;
303
+ }
304
+ return name;
305
+ }
306
+ function numberFormat(column) {
307
+ switch (column.type) {
308
+ case "date":
309
+ return "yyyy\\-mm\\-dd";
310
+ case "datetime":
311
+ return "yyyy\\-mm\\-dd\\ hh:mm:ss";
312
+ case "money":
313
+ return `#,##0${column.scale > 0 ? `.${"0".repeat(column.scale)}` : ""}\\ "${column.currency}"`;
314
+ case "number":
315
+ return column.format;
316
+ default:
317
+ return;
318
+ }
319
+ }
320
+
321
+ class StyleTable {
322
+ formats = [];
323
+ styleOf(column) {
324
+ const format = numberFormat(column);
325
+ if (format === undefined)
326
+ return 0;
327
+ const known = this.formats.indexOf(format);
328
+ if (known !== -1)
329
+ return FIRST_CUSTOM_STYLE + known;
330
+ this.formats.push(format);
331
+ return FIRST_CUSTOM_STYLE + this.formats.length - 1;
332
+ }
333
+ xml() {
334
+ const formats = this.formats.map((format, index) => `<numFmt numFmtId="${FIRST_CUSTOM_FORMAT + index}" formatCode="${escapeXml(format)}"/>`).join("");
335
+ const styles = this.formats.map((_, index) => `<xf numFmtId="${FIRST_CUSTOM_FORMAT + index}" fontId="0" fillId="0" borderId="0" xfId="0" applyNumberFormat="1"/>`).join("");
336
+ return `${XML_DECLARATION}<styleSheet xmlns="${SPREADSHEET}">${formats ? `<numFmts count="${this.formats.length}">${formats}</numFmts>` : ""}<fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><name val="Calibri"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="${FIRST_CUSTOM_STYLE + this.formats.length}"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/><xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1"/><xf numFmtId="49" fontId="0" fillId="0" borderId="0" xfId="0" quotePrefix="1" applyNumberFormat="1"/>${styles}</cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles></styleSheet>`;
337
+ }
338
+ }
339
+ function textCell(reference, value, style) {
340
+ const styled = style === 0 ? "" : ` s="${style}"`;
341
+ return `<c r="${reference}"${styled} t="inlineStr"><is><t xml:space="preserve">${escapeText(value)}</t></is></c>`;
342
+ }
343
+ function cellXml(reference, cell, style) {
344
+ switch (cell.kind) {
345
+ case "text":
346
+ return textCell(reference, cell.value, FORMULA_START.test(cell.value) ? STYLE_LITERAL_TEXT : 0);
347
+ case "boolean":
348
+ return `<c r="${reference}" t="b"><v>${cell.value ? 1 : 0}</v></c>`;
349
+ case "number":
350
+ return `<c r="${reference}"${style === 0 ? "" : ` s="${style}"`}><v>${cell.value}</v></c>`;
351
+ }
352
+ }
353
+ function sheetXml(sheet, styles) {
354
+ const keys = new Set(sheet.columns.map((column) => column.key));
355
+ if (keys.size !== sheet.columns.length) {
356
+ throw new TypeError(`sheet "${sheet.name}": a column key repeats`);
357
+ }
358
+ const columnStyles = sheet.columns.map((column) => styles.styleOf(column));
359
+ const widths = sheet.columns.map((column, index) => {
360
+ const width = column.width ?? Math.max(12, Math.min(column.header.length + 2, 60));
361
+ return `<col min="${index + 1}" max="${index + 1}" width="${width}" customWidth="1"/>`;
362
+ }).join("");
363
+ const header = sheet.columns.map((column, index) => textCell(`${columnName(index)}1`, column.header, STYLE_HEADER)).join("");
364
+ const rows = sheet.rows.map((row, rowIndex) => {
365
+ const rowNumber = rowIndex + 2;
366
+ const cells = sheet.columns.flatMap((column, columnIndex) => {
367
+ const value = row[column.key];
368
+ if (value === undefined || value === null)
369
+ return [];
370
+ const reference = `${columnName(columnIndex)}${rowNumber}`;
371
+ const cell = cellOf(value, column, `sheet "${sheet.name}" ${reference}`);
372
+ return [cellXml(reference, cell, columnStyles[columnIndex] ?? 0)];
373
+ });
374
+ return `<row r="${rowNumber}">${cells.join("")}</row>`;
375
+ });
376
+ const lastCell = `${columnName(sheet.columns.length - 1)}${sheet.rows.length + 1}`;
377
+ return `${XML_DECLARATION}<worksheet xmlns="${SPREADSHEET}"><dimension ref="A1:${lastCell}"/><sheetViews><sheetView workbookViewId="0"><pane ySplit="1" topLeftCell="A2" activePane="bottomLeft" state="frozen"/></sheetView></sheetViews><cols>${widths}</cols><sheetData><row r="1">${header}</row>${rows.join("")}</sheetData><autoFilter ref="A1:${lastCell}"/></worksheet>`;
378
+ }
379
+ async function renderXlsx(workbook) {
380
+ const { sheets } = XlsxWorkbookSchema.parse(workbook);
381
+ const styles = new StyleTable;
382
+ const worksheets = sheets.map((sheet, index) => ({
383
+ name: `xl/worksheets/sheet${index + 1}.xml`,
384
+ content: sheetXml(sheet, styles)
385
+ }));
386
+ const contentTypes = `${XML_DECLARATION}<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>${worksheets.map(({ name }) => `<Override PartName="/${name}" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`).join("")}</Types>`;
387
+ const packageRelationships = `${XML_DECLARATION}<Relationships xmlns="${RELATIONSHIPS}"><Relationship Id="rId1" Type="${OFFICE_RELATIONSHIPS}/officeDocument" Target="xl/workbook.xml"/></Relationships>`;
388
+ const workbookXml = `${XML_DECLARATION}<workbook xmlns="${SPREADSHEET}" xmlns:r="${OFFICE_RELATIONSHIPS}"><bookViews><workbookView/></bookViews><sheets>${sheets.map((sheet, index) => `<sheet name="${escapeXml(sheet.name)}" sheetId="${index + 1}" r:id="rId${index + 1}"/>`).join("")}</sheets></workbook>`;
389
+ const workbookRelationships = `${XML_DECLARATION}<Relationships xmlns="${RELATIONSHIPS}">${sheets.map((_, index) => `<Relationship Id="rId${index + 1}" Type="${OFFICE_RELATIONSHIPS}/worksheet" Target="worksheets/sheet${index + 1}.xml"/>`).join("")}<Relationship Id="rId${sheets.length + 1}" Type="${OFFICE_RELATIONSHIPS}/styles" Target="styles.xml"/></Relationships>`;
390
+ return await zip([
391
+ { name: "[Content_Types].xml", content: contentTypes },
392
+ { name: "_rels/.rels", content: packageRelationships },
393
+ { name: "xl/workbook.xml", content: workbookXml },
394
+ { name: "xl/_rels/workbook.xml.rels", content: workbookRelationships },
395
+ { name: "xl/styles.xml", content: styles.xml() },
396
+ ...worksheets
397
+ ]);
398
+ }
399
+ export {
400
+ XLSX_MEDIA_TYPE,
401
+ XlsxCellError,
402
+ XlsxColumnSchema,
403
+ XlsxSheetSchema,
404
+ XlsxWorkbookSchema,
405
+ renderXlsx
406
+ };
@@ -4,22 +4,22 @@ import {
4
4
  AgentStoreEventPageSchema2,
5
5
  AgentRecoverableDescriptorSchema2,
6
6
  AgentRecoverablePageSchema2,
7
- canonicalAgentJson2
8
- } from "./index-fggxgbrk.js";
7
+ canonicalAgentJson2,
8
+ AgentRuntimeHeadSchema2,
9
+ AgentStoredRunSchema2,
10
+ AgentAdmissionReceiptSchema2,
11
+ AgentSeedReceiptSchema2,
12
+ AgentHistoryMutationSchema2
13
+ } from "./index-xx1j310k.js";
9
14
  import {
10
15
  AgentMessageSchema2,
11
16
  AgentRunSchema2
12
17
  } from "./index-8kzct1d6.js";
13
18
  import {
14
- AgentRuntimeHeadSchema2,
15
- AgentStoredRunSchema2,
16
- AgentAdmissionReceiptSchema2,
17
- AgentSeedReceiptSchema2,
18
- AgentHistoryMutationSchema2,
19
19
  appendEventIn,
20
20
  ArchiveProjectionSchema,
21
21
  createAgentRuntimeStore2
22
- } from "./index-jq2ky8fw.js";
22
+ } from "./index-cycp3r3e.js";
23
23
  import {
24
24
  AgentConversationPageSchema2,
25
25
  AgentConversationMessagePageSchema2
@@ -0,0 +1,7 @@
1
+ // src/tracking/server/bot.ts
2
+ var DEFAULT_BOT_USER_AGENT_PATTERN2 = /bot|crawl|spider|slurp|mediapartners|facebookexternalhit|bingpreview|yandex|baidu|duckduckbot|uptimerobot|pingdom|gtmetrix|pagespeed|lighthouse|headlesschrome/i;
3
+ function isBotUserAgent2(userAgent, pattern = DEFAULT_BOT_USER_AGENT_PATTERN2) {
4
+ return userAgent ? pattern.test(userAgent) : false;
5
+ }
6
+
7
+ export { DEFAULT_BOT_USER_AGENT_PATTERN2, isBotUserAgent2 };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  withExclusiveLock2
3
- } from "./index-zqkz4af9.js";
3
+ } from "./index-nqxrm176.js";
4
4
  import {
5
5
  readBoundedFile
6
6
  } from "./index-m616f0yz.js";