stitchkit 0.116.0 → 0.118.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 (130) hide show
  1. package/CHANGELOG.md +56 -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 +352 -137
  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/telegram/update-intake-work.d.ts +20 -1
  82. package/dist/telegram/update-intake-work.d.ts.map +1 -1
  83. package/dist/telegram/update-intake.d.ts +12 -3
  84. package/dist/telegram/update-intake.d.ts.map +1 -1
  85. package/dist/telegram/update-store-check.d.ts +1 -1
  86. package/dist/telegram/update-store-check.d.ts.map +1 -1
  87. package/dist/telegram/update-store-postgres.d.ts.map +1 -1
  88. package/dist/telegram/update-store-sqlite.d.ts.map +1 -1
  89. package/dist/telegram/update-store.d.ts +5 -1
  90. package/dist/telegram/update-store.d.ts.map +1 -1
  91. package/dist/tracking/attribution.d.ts +1 -1
  92. package/dist/tracking/attribution.d.ts.map +1 -1
  93. package/dist/tracking/client-visit.d.ts +3 -1
  94. package/dist/tracking/client-visit.d.ts.map +1 -1
  95. package/dist/tracking/client.d.ts.map +1 -1
  96. package/dist/tracking/performance/collector.d.ts +61 -0
  97. package/dist/tracking/performance/collector.d.ts.map +1 -0
  98. package/dist/tracking/performance/schema.d.ts +45 -0
  99. package/dist/tracking/performance/schema.d.ts.map +1 -0
  100. package/dist/tracking/performance/summary.d.ts +12 -0
  101. package/dist/tracking/performance/summary.d.ts.map +1 -0
  102. package/dist/tracking/privacy.d.ts +5 -0
  103. package/dist/tracking/privacy.d.ts.map +1 -0
  104. package/dist/tracking/server/telemetry-health.d.ts +31 -0
  105. package/dist/tracking/server/telemetry-health.d.ts.map +1 -0
  106. package/dist/xlsx/cells.d.ts +17 -0
  107. package/dist/xlsx/cells.d.ts.map +1 -0
  108. package/dist/xlsx/render.d.ts +11 -0
  109. package/dist/xlsx/render.d.ts.map +1 -0
  110. package/dist/xlsx/schema.d.ts +119 -0
  111. package/dist/xlsx/schema.d.ts.map +1 -0
  112. package/dist/xlsx/zip.d.ts +13 -0
  113. package/dist/xlsx/zip.d.ts.map +1 -0
  114. package/llms/agent-runtime.2.txt +40 -16
  115. package/llms/agent-runtime.3.txt +17 -0
  116. package/llms/agent-runtime.txt +4 -1
  117. package/llms/primitives.txt +21 -0
  118. package/llms/stitchkit.txt +9 -6
  119. package/llms/telegram.txt +46 -15
  120. package/llms/tracking-contract.txt +32 -0
  121. package/llms/tracking-performance.txt +21 -0
  122. package/llms/tracking-server.txt +1 -0
  123. package/llms/tracking.txt +75 -12
  124. package/llms/{upgrading-0.105.0-0.116.0.txt → upgrading-0.105.0-0.118.0.txt} +73 -3
  125. package/llms/upgrading.txt +1 -1
  126. package/llms/xlsx.txt +107 -0
  127. package/llms-full.txt +392 -34
  128. package/llms.txt +11 -7
  129. package/package.json +27 -9
  130. package/dist/{index-z3d6smer.js → index-tdpmfks8.js} +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"client-visit.d.ts","sourceRoot":"","sources":["../../src/tracking/client-visit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client-visit.d.ts","sourceRoot":"","sources":["../../src/tracking/client-visit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/tracking/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/tracking/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ export declare function isLabUserAgent(userAgent: string): boolean;
2
+ /** The part of `web-vitals` this uses, so the declarations do not need the peer. */
3
+ export interface VitalsMetric {
4
+ readonly name: string;
5
+ readonly value: number;
6
+ readonly navigationType?: string;
7
+ }
8
+ export type VitalsObserver = (report: (metric: VitalsMetric) => void, options?: {
9
+ reportAllChanges?: boolean;
10
+ }) => void;
11
+ export interface VitalsLibrary {
12
+ onLCP: VitalsObserver;
13
+ onINP: VitalsObserver;
14
+ onCLS: VitalsObserver;
15
+ onFCP: VitalsObserver;
16
+ onTTFB: VitalsObserver;
17
+ }
18
+ /** What the collector needs from a page. */
19
+ export interface PerformanceHost {
20
+ readonly userAgent: string;
21
+ /** `navigator.webdriver`: a browser under automation. */
22
+ readonly automated: boolean;
23
+ readonly mobile: boolean;
24
+ now(): number;
25
+ route(): string;
26
+ /** Runs `work` once the page has loaded and the main thread is idle. */
27
+ afterLoad(work: () => void): void;
28
+ /** Runs `work` every time the page may be going away. */
29
+ onHidden(work: () => void): void;
30
+ after(delayMs: number, work: () => void): void;
31
+ beacon(url: string, body: string): boolean;
32
+ storage: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | undefined;
33
+ }
34
+ export interface PerformanceCollectorConfig {
35
+ /** The build that served the page. */
36
+ buildId: string;
37
+ /**
38
+ * Where `sendBeacon` posts one sample as a JSON string, sent as `text/plain`:
39
+ * the one type a closing page can deliver to another origin. Declare the endpoint
40
+ * `safelistedBody: true`.
41
+ */
42
+ url: string;
43
+ /** The visit this load belongs to, when the application has one. */
44
+ visitId?: () => string | null;
45
+ /** When the `early` sample leaves, after the library has loaded. Default 5000 ms. */
46
+ earlyDelayMs?: number;
47
+ /** Test seam. Default: the real page. */
48
+ host?: PerformanceHost;
49
+ /** Test seam. Default: `import('web-vitals')`. */
50
+ loadVitals?: () => Promise<VitalsLibrary>;
51
+ }
52
+ export interface PerformanceCollector {
53
+ /** Stop sending, and let a later call start again. Observers of `web-vitals` live on. */
54
+ stop(): void;
55
+ }
56
+ /**
57
+ * Start collecting on this page, and only on a page: on a server, for a lab agent
58
+ * or under automation it returns an inert collector and sends nothing.
59
+ */
60
+ export declare function createPerformanceCollector(config: PerformanceCollectorConfig): PerformanceCollector;
61
+ //# sourceMappingURL=collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/tracking/performance/collector.ts"],"names":[],"mappings":"AAiCA,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,EACtC,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,KACrC,IAAI,CAAC;AAEV,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,GAAG,IAAI,MAAM,CAAC;IACd,KAAK,IAAI,MAAM,CAAC;IAChB,wEAAwE;IACxE,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC,GAAG,SAAS,CAAC;CAC1E;AAED,MAAM,WAAW,0BAA0B;IACzC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9B,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACnC,yFAAyF;IACzF,IAAI,IAAI,IAAI,CAAC;CACd;AA6ED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,0BAA0B,GACjC,oBAAoB,CA2FtB"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * The five Web Vitals of one page load. A metric that did not arrive is `null`,
4
+ * never zero: a zero LCP would pull an average down with a page that never
5
+ * painted, and nothing downstream could tell them apart.
6
+ */
7
+ export declare const PerformanceVitalsSchema: z.ZodObject<{
8
+ lcpMs: z.ZodNullable<z.ZodNumber>;
9
+ inpMs: z.ZodNullable<z.ZodNumber>;
10
+ fcpMs: z.ZodNullable<z.ZodNumber>;
11
+ ttfbMs: z.ZodNullable<z.ZodNumber>;
12
+ cls: z.ZodNullable<z.ZodNumber>;
13
+ }, z.core.$strip>;
14
+ export type PerformanceVitals = z.infer<typeof PerformanceVitalsSchema>;
15
+ /**
16
+ * One page load as measured in a real browser. `id` is the same for every sample
17
+ * of that load: `early` arrives while the visitor reads, `final` as the page goes,
18
+ * and the later one replaces the earlier in an application's table.
19
+ */
20
+ export declare const PerformanceSampleSchema: z.ZodObject<{
21
+ schemaVersion: z.ZodLiteral<1>;
22
+ id: z.ZodString;
23
+ kind: z.ZodEnum<{
24
+ early: "early";
25
+ final: "final";
26
+ }>;
27
+ route: z.ZodString;
28
+ buildId: z.ZodString;
29
+ visitId: z.ZodNullable<z.ZodString>;
30
+ deviceClass: z.ZodEnum<{
31
+ desktop: "desktop";
32
+ mobile: "mobile";
33
+ }>;
34
+ navigationType: z.ZodNullable<z.ZodString>;
35
+ vitals: z.ZodObject<{
36
+ lcpMs: z.ZodNullable<z.ZodNumber>;
37
+ inpMs: z.ZodNullable<z.ZodNumber>;
38
+ fcpMs: z.ZodNullable<z.ZodNumber>;
39
+ ttfbMs: z.ZodNullable<z.ZodNumber>;
40
+ cls: z.ZodNullable<z.ZodNumber>;
41
+ }, z.core.$strip>;
42
+ capturedAt: z.ZodNumber;
43
+ }, z.core.$strip>;
44
+ export type PerformanceSample = z.infer<typeof PerformanceSampleSchema>;
45
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/tracking/performance/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;iBAMlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;iBAYlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface PerformanceMetricSummary {
2
+ /** Samples that carried the metric. A `null` is a missing value, not a fast one. */
3
+ readonly samples: number;
4
+ readonly p75: number | null;
5
+ /** `null` below `minSamples`, so a thin route shows no number rather than a wrong one. */
6
+ readonly p95: number | null;
7
+ }
8
+ /** The figures a report may print for one metric of many samples. */
9
+ export declare function summarizePerformanceMetric(values: readonly (number | null)[], options?: {
10
+ readonly minSamples?: number;
11
+ }): PerformanceMetricSummary;
12
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/tracking/performance/summary.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,wBAAwB;IACvC,oFAAoF;IACpF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,0FAA0F;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAOD,qEAAqE;AACrE,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAClC,OAAO,GAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7C,wBAAwB,CAQ1B"}
@@ -0,0 +1,5 @@
1
+ /** Mask secrets in a URL, a query string or free text, cut to 16 KiB. */
2
+ export declare function redactTrackingText(input: string): string;
3
+ /** The same rule through a value of any shape: a secret key masks whatever it holds. */
4
+ export declare function redactTrackingValue(value: unknown): unknown;
5
+ //# sourceMappingURL=privacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy.d.ts","sourceRoot":"","sources":["../../src/tracking/privacy.ts"],"names":[],"mappings":"AA0FA,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyBxD;AAED,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAY3D"}
@@ -0,0 +1,31 @@
1
+ /** What one visit said about its browser's outbox. */
2
+ export interface TrackingOutboxReport {
3
+ /** The browser across its visits: `browserStreamId` of a visit's bootstrap. */
4
+ readonly stream: string;
5
+ readonly state: 'available' | 'unavailable' | 'unknown';
6
+ readonly queued: number;
7
+ /** Lifetime: a browser repeats it with every visit. */
8
+ readonly dropped: number;
9
+ }
10
+ export interface TrackingTelemetryHealth {
11
+ readonly status: 'ok' | 'degraded' | 'unknown';
12
+ readonly observedVisits: number;
13
+ readonly unknownVisits: number;
14
+ readonly unavailable: number;
15
+ /** What each browser last said it still holds. */
16
+ readonly queued: number;
17
+ /** Events lost inside the window. */
18
+ readonly dropped: number;
19
+ }
20
+ /**
21
+ * Is tracking losing events? A browser keeps `dropped` for life and sends it with
22
+ * every visit, so a sum over visits multiplies an old loss by the number of
23
+ * returns. A loss of this window is what each browser's counter grew by over
24
+ * `baselines`, what it reported before the window; a browser with no earlier report
25
+ * counts from zero, because its loss cannot be told from a new one.
26
+ *
27
+ * `queued` stays out of the verdict: those are a past visit's events, which the
28
+ * next visit delivers. They become a loss only by being dropped.
29
+ */
30
+ export declare function trackingTelemetryHealth(reports: readonly TrackingOutboxReport[], baselines?: ReadonlyMap<string, number>): TrackingTelemetryHealth;
31
+ //# sourceMappingURL=telemetry-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-health.d.ts","sourceRoot":"","sources":["../../../src/tracking/server/telemetry-health.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,SAAS,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GACjD,uBAAuB,CAgCzB"}
@@ -0,0 +1,17 @@
1
+ import type { XlsxColumn } from './schema.js';
2
+ export declare class XlsxCellError extends TypeError {
3
+ readonly name = "XlsxCellError";
4
+ }
5
+ /** What goes into `<c>`: a number as written, a flag, or text. */
6
+ export type XlsxCell = {
7
+ readonly kind: 'number';
8
+ readonly value: string;
9
+ } | {
10
+ readonly kind: 'boolean';
11
+ readonly value: boolean;
12
+ } | {
13
+ readonly kind: 'text';
14
+ readonly value: string;
15
+ };
16
+ export declare function cellOf(value: unknown, column: XlsxColumn, where: string): XlsxCell;
17
+ //# sourceMappingURL=cells.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cells.d.ts","sourceRoot":"","sources":["../../src/xlsx/cells.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAY3C,qBAAa,aAAc,SAAQ,SAAS;IAC1C,SAAkB,IAAI,mBAAmB;CAC1C;AAED,kEAAkE;AAClE,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AA4HtD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAkBlF"}
@@ -0,0 +1,11 @@
1
+ import { type XlsxWorkbook } from './schema.js';
2
+ export declare const XLSX_MEDIA_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
3
+ /**
4
+ * A workbook as XLSX bytes: typed cells from rows, identical bytes for identical
5
+ * input on one runtime. Text is stored as text, so a cell that reads `=HYPERLINK("x")` is what it
6
+ * says and the file holds no formula at all. A value of the wrong type, or one
7
+ * Excel could not hold exactly, refuses with the cell's address instead of
8
+ * landing wrong. The whole workbook is built in memory.
9
+ */
10
+ export declare function renderXlsx(workbook: XlsxWorkbook): Promise<Uint8Array>;
11
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/xlsx/render.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,YAAY,EAAsB,MAAM,UAAU,CAAC;AAGlF,eAAO,MAAM,eAAe,sEACyC,CAAC;AAsJtE;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAoC5E"}
@@ -0,0 +1,119 @@
1
+ import { z } from 'zod';
2
+ export declare const XlsxColumnSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
+ key: z.ZodString;
4
+ header: z.ZodString;
5
+ width: z.ZodOptional<z.ZodNumber>;
6
+ type: z.ZodLiteral<"text">;
7
+ }, z.core.$strip>, z.ZodObject<{
8
+ key: z.ZodString;
9
+ header: z.ZodString;
10
+ width: z.ZodOptional<z.ZodNumber>;
11
+ type: z.ZodLiteral<"number">;
12
+ format: z.ZodOptional<z.ZodString>;
13
+ }, z.core.$strip>, z.ZodObject<{
14
+ key: z.ZodString;
15
+ header: z.ZodString;
16
+ width: z.ZodOptional<z.ZodNumber>;
17
+ type: z.ZodLiteral<"date">;
18
+ }, z.core.$strip>, z.ZodObject<{
19
+ key: z.ZodString;
20
+ header: z.ZodString;
21
+ width: z.ZodOptional<z.ZodNumber>;
22
+ type: z.ZodLiteral<"datetime">;
23
+ timeZone: z.ZodString;
24
+ }, z.core.$strip>, z.ZodObject<{
25
+ key: z.ZodString;
26
+ header: z.ZodString;
27
+ width: z.ZodOptional<z.ZodNumber>;
28
+ type: z.ZodLiteral<"money">;
29
+ currency: z.ZodString;
30
+ scale: z.ZodNumber;
31
+ }, z.core.$strip>, z.ZodObject<{
32
+ key: z.ZodString;
33
+ header: z.ZodString;
34
+ width: z.ZodOptional<z.ZodNumber>;
35
+ type: z.ZodLiteral<"boolean">;
36
+ }, z.core.$strip>], "type">;
37
+ export type XlsxColumn = z.infer<typeof XlsxColumnSchema>;
38
+ export declare const XlsxSheetSchema: z.ZodObject<{
39
+ name: z.ZodString;
40
+ columns: z.ZodReadonly<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
41
+ key: z.ZodString;
42
+ header: z.ZodString;
43
+ width: z.ZodOptional<z.ZodNumber>;
44
+ type: z.ZodLiteral<"text">;
45
+ }, z.core.$strip>, z.ZodObject<{
46
+ key: z.ZodString;
47
+ header: z.ZodString;
48
+ width: z.ZodOptional<z.ZodNumber>;
49
+ type: z.ZodLiteral<"number">;
50
+ format: z.ZodOptional<z.ZodString>;
51
+ }, z.core.$strip>, z.ZodObject<{
52
+ key: z.ZodString;
53
+ header: z.ZodString;
54
+ width: z.ZodOptional<z.ZodNumber>;
55
+ type: z.ZodLiteral<"date">;
56
+ }, z.core.$strip>, z.ZodObject<{
57
+ key: z.ZodString;
58
+ header: z.ZodString;
59
+ width: z.ZodOptional<z.ZodNumber>;
60
+ type: z.ZodLiteral<"datetime">;
61
+ timeZone: z.ZodString;
62
+ }, z.core.$strip>, z.ZodObject<{
63
+ key: z.ZodString;
64
+ header: z.ZodString;
65
+ width: z.ZodOptional<z.ZodNumber>;
66
+ type: z.ZodLiteral<"money">;
67
+ currency: z.ZodString;
68
+ scale: z.ZodNumber;
69
+ }, z.core.$strip>, z.ZodObject<{
70
+ key: z.ZodString;
71
+ header: z.ZodString;
72
+ width: z.ZodOptional<z.ZodNumber>;
73
+ type: z.ZodLiteral<"boolean">;
74
+ }, z.core.$strip>], "type">>>;
75
+ rows: z.ZodReadonly<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
76
+ }, z.core.$strip>;
77
+ export declare const XlsxWorkbookSchema: z.ZodObject<{
78
+ sheets: z.ZodReadonly<z.ZodArray<z.ZodObject<{
79
+ name: z.ZodString;
80
+ columns: z.ZodReadonly<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
81
+ key: z.ZodString;
82
+ header: z.ZodString;
83
+ width: z.ZodOptional<z.ZodNumber>;
84
+ type: z.ZodLiteral<"text">;
85
+ }, z.core.$strip>, z.ZodObject<{
86
+ key: z.ZodString;
87
+ header: z.ZodString;
88
+ width: z.ZodOptional<z.ZodNumber>;
89
+ type: z.ZodLiteral<"number">;
90
+ format: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$strip>, z.ZodObject<{
92
+ key: z.ZodString;
93
+ header: z.ZodString;
94
+ width: z.ZodOptional<z.ZodNumber>;
95
+ type: z.ZodLiteral<"date">;
96
+ }, z.core.$strip>, z.ZodObject<{
97
+ key: z.ZodString;
98
+ header: z.ZodString;
99
+ width: z.ZodOptional<z.ZodNumber>;
100
+ type: z.ZodLiteral<"datetime">;
101
+ timeZone: z.ZodString;
102
+ }, z.core.$strip>, z.ZodObject<{
103
+ key: z.ZodString;
104
+ header: z.ZodString;
105
+ width: z.ZodOptional<z.ZodNumber>;
106
+ type: z.ZodLiteral<"money">;
107
+ currency: z.ZodString;
108
+ scale: z.ZodNumber;
109
+ }, z.core.$strip>, z.ZodObject<{
110
+ key: z.ZodString;
111
+ header: z.ZodString;
112
+ width: z.ZodOptional<z.ZodNumber>;
113
+ type: z.ZodLiteral<"boolean">;
114
+ }, z.core.$strip>], "type">>>;
115
+ rows: z.ZodReadonly<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
116
+ }, z.core.$strip>>>;
117
+ }, z.core.$strip>;
118
+ export type XlsxWorkbook = z.input<typeof XlsxWorkbookSchema>;
119
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/xlsx/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAqB3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAK1D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The ZIP container an XLSX is: deflated entries, no directories, no extras.
3
+ *
4
+ * Written here rather than taken from a library because the package has one
5
+ * runtime dependency and this format needs about a hundred lines. Compression
6
+ * goes through the platform's `CompressionStream`. Entry times are the format's
7
+ * epoch, so the same workbook always produces the same bytes.
8
+ */
9
+ export declare function zip(entries: readonly {
10
+ readonly name: string;
11
+ readonly content: string;
12
+ }[]): Promise<Uint8Array>;
13
+ //# sourceMappingURL=zip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../src/xlsx/zip.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuDH,wBAAsB,GAAG,CACvB,OAAO,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GACtE,OAAO,CAAC,UAAU,CAAC,CA8DrB"}
@@ -237,6 +237,46 @@ canonical run and failed assistant atomically, removes the run from recovery
237
237
  indexes, and publishes the resulting `run-state`. A run that moved since it was
238
238
  read returns a conflict; `staleOwner: true` is mandatory evidence, not a default.
239
239
 
240
+ The same evidence holds inside one process when a store failure outlives the
241
+ run's own handling. A store call around execution that throws is retried for
242
+ about half a second, then decided by where the run stood. Retries bound a call
243
+ that fails, not one that hangs, so give the store its own timeouts:
244
+
245
+ | Failure | Outcome of `result` |
246
+ |---|---|
247
+ | reading or acquiring the run, retries spent, or a lost reply to the acquisition | resolves with reason `abandoned`, the cause on the operator's `run-terminal` |
248
+ | the first assistant draft | resolves with reason `runtime_failure`, like a checkpoint later in the turn |
249
+ | a conflict on a run another executor holds | rejects with the conflict; the record stays that executor's |
250
+ | a conflict on a run still queued, behind another run | rejects with `AgentRunUnsettledError`; `recover()` or `resume` picks it up |
251
+ | the terminal commit, or closing the run, retries spent | rejects with `AgentRunUnsettledError` |
252
+
253
+ `AgentRunUnsettledError.run` is the record as last read, and the store may be ahead
254
+ of it. Nothing in this process executes that run, and later turns of its
255
+ conversation wait behind it. `recover()` skips a `running` run with a live owner, so
256
+ a long-running process closes it itself once the store answers. Read the record
257
+ first: with no owner or with `error.ownerId` it is this runtime's, and any other
258
+ owner is executing it.
259
+
260
+ ```ts
261
+ const settled = await ticket.result.catch(async (error) => {
262
+ if (!(error instanceof AgentRunUnsettledError)) throw error
263
+ const { conversationId, id: runId } = error.run
264
+ const current = await store.loadRun({ conversationId, runId })
265
+ if (current && [undefined, error.ownerId].includes(current.run.ownerId)) {
266
+ await runtime.abandon({
267
+ conversationId,
268
+ runId,
269
+ expectedRevision: current.run.revision,
270
+ staleOwner: true,
271
+ })
272
+ }
273
+ throw error
274
+ })
275
+ ```
276
+
277
+ A `queued` run lost to a run ahead of it, and `runtime.resume()` can run it instead
278
+ once that one ends.
279
+
240
280
  ## Store operations
241
281
 
242
282
  `AgentRuntimeStore` remains the runtime-facing aggregate. Application adapters
@@ -837,19 +877,3 @@ reconcile.
837
877
 
838
878
  The sink deduplicates stable event IDs by default. Cross-crash exactly-once still requires a durable
839
879
  outbox.
840
-
841
- ## Deterministic race and adapter proof
842
-
843
- `stitchkit/agent-runtime/testing` exports `createAgentRaceBarrier`, `createAgentRaceDriver`,
844
- `createAgentRaceTrace` and `runAgentStoreConformance` — agent testing tools live beside the agent
845
- runtime, and `stitchkit/testing` imports none of it. Barriers have bounded teardown, traces assert exact partial order, and the
846
- helpers are exercised from packed Bun and Node consumers. `runAgentStoreConformance` runs duplicate,
847
- coalescing, collision, stale checkpoint, replay safety, terminal race, absorption, bounded reads,
848
- causal queued-history order, durable interrupt priority, compaction and recovery invariants against
849
- any fresh durable adapter.
850
-
851
- It picks its conversation identities itself and passes them to `createStore(context)` **before the
852
- first mutation**, so an adapter whose runtime rows reference an application-owned conversation row
853
- can provision those parents; the optional `cleanup(context)` removes them again, and runs once
854
- whether the scenario passed or failed. A factory that owns no fixture state ignores the argument and
855
- keeps working unchanged.
@@ -12,6 +12,22 @@ Parts of this slice:
12
12
  # Guide: Agent application runtime (docs/guide/agent-runtime.md) (continued)
13
13
  ==============================================================================
14
14
 
15
+ ## Deterministic race and adapter proof
16
+
17
+ `stitchkit/agent-runtime/testing` exports `createAgentRaceBarrier`, `createAgentRaceDriver`,
18
+ `createAgentRaceTrace` and `runAgentStoreConformance` — agent testing tools live beside the agent
19
+ runtime, and `stitchkit/testing` imports none of it. Barriers have bounded teardown, traces assert exact partial order, and the
20
+ helpers are exercised from packed Bun and Node consumers. `runAgentStoreConformance` runs duplicate,
21
+ coalescing, collision, stale checkpoint, replay safety, terminal race, absorption, bounded reads,
22
+ causal queued-history order, durable interrupt priority, compaction and recovery invariants against
23
+ any fresh durable adapter.
24
+
25
+ It picks its conversation identities itself and passes them to `createStore(context)` **before the
26
+ first mutation**, so an adapter whose runtime rows reference an application-owned conversation row
27
+ can provision those parents; the optional `cleanup(context)` removes them again, and runs once
28
+ whether the scenario passed or failed. A factory that owns no fixture state ignores the argument and
29
+ keeps working unchanged.
30
+
15
31
  ## Plain completions and shared invocation receipts
16
32
 
17
33
  Use `createModelInvocationLedger` from `stitchkit/agent-runtime` when a direct text
@@ -191,6 +207,7 @@ Server-only optional application runtime. See the
191
207
  | `AgentRuntimeRecoverOptions` | _type_ | bounded paged startup recovery with causal per-conversation scheduling, context resolver and explicit evidence policy |
192
208
  | `AgentRuntimeAbandonInput` | _type_ | one known orphan identity, expected revision and mandatory stale-owner evidence for `runtime.abandon()` |
193
209
  | `AgentRuntimeConflictError` | class | thrown when a store mutation loses to a concurrent writer — catchable by type from `stitchkit/agent-runtime` |
210
+ | `AgentRunUnsettledError` | class | rejects `result` when the store never answered: `.run` is still active with no executor, close it with `runtime.abandon()` |
194
211
  | `AgentSessionCloseOptions` | _type_ | `gracePeriodMs` for natural settlement, then abort, then `forceTimeoutMs` for bounded settlement after it |
195
212
  | `AgentSessionCloseResult` | _type_ | what `close()` achieved: `settled`, or `timedOut` with `remaining` runs still in flight. Only omitting `forceTimeoutMs` guarantees nothing is in flight on return |
196
213
  | `AgentHistoryProjectionOptions` | _type_ | storage-neutral file resolver, explicit unresolved-file behavior, and how an interrupted turn reaches the model (`interruptedAssistant`) |
@@ -420,7 +420,10 @@ remains the signal-only compatibility surface and additionally waits for admissi
420
420
 
421
421
  The in-memory store is a reference adapter and has process-local durability
422
422
  only. Production applications normally call `createAgentRuntimeStore()` and
423
- provide one database transaction driver:
423
+ provide one database transaction driver. Its `transaction` owns the retry of a
424
+ serialization conflict, wherever the database reports it: on a statement or on
425
+ `COMMIT`, which some clients surface in a different shape. Pass
426
+ `armCommitConflict` to `runAgentStoreConformance` to prove it:
424
427
 
425
428
  ```ts
426
429
  const store = createAgentRuntimeStore({
@@ -60,6 +60,23 @@ migration.
60
60
  literal in the type; division and rational shares return an explicit remainder. It does not own
61
61
  exchange rates.
62
62
 
63
+ `moneyFromDecimal('RUB', '5041.82', 2)` and `moneyToDecimal(value, 2)` cross between major units and
64
+ minor ones with the currency's scale as a parameter, and a value finer than that scale is refused
65
+ rather than cut. `multiplyMoneyByDecimal(price, '2.5', policy)` computes the exact product and rounds it
66
+ once. `roundMoney(value, policy)` brings an amount to a table's steps:
67
+
68
+ ```ts
69
+ const shelfPrice = defineRoundingPolicy({
70
+ mode: 'half-up', // or 'half-even', 'up', 'down'
71
+ tiers: [{ below: '100000', step: '100' }, { step: '1000' }], // minor units
72
+ })
73
+ roundMoney(moneyFromDecimal('RUB', '5041.82', 2), shelfPrice) // { minor: '504000', currency: 'RUB' }
74
+ ```
75
+
76
+ A policy is data, so it can be stored with the prices it produced. `roundDecimal(value, policy)` is
77
+ the same table over a plain decimal. `DecimalStringSchema` accepts one canonical spelling and refuses a
78
+ JSON number; `DecimalInputSchema` takes a spelling such as a database's `10.50` to the canonical one.
79
+
63
80
  `defineUnitSystem` stores exact canonical decimal strings. Every conversion is an application
64
81
  rational with an id. A converted `QuantityProjection` is `derived` and carries both its source and
65
82
  conversion id; a form/database value can be marked `recorded`. Whether a derived projection is
@@ -172,6 +189,10 @@ schedules, transports and file generation remain application-owned.
172
189
  | `PermissionGrantMatrix` / `PermissionCheckResult` | _types_ | compile-time complete matrix and unknown/allowed/denied runtime result |
173
190
  | `defineMoney` / `createMoneySchema` | functions | fixed-currency JSON-safe minor-unit value and Zod schema |
174
191
  | `addMoney` / `subtractMoney` / `multiplyMoney` / `shareMoney` / `splitMoney` | functions | exact same-currency arithmetic with explicit indivisible remainder |
192
+ | `moneyFromDecimal` / `moneyToDecimal` | functions | major units to minor ones and back, with the currency's scale as a parameter |
193
+ | `multiplyMoneyByDecimal` / `roundMoney` | functions | an exact product rounded once, and an amount brought to a policy's steps |
194
+ | `defineRoundingPolicy` / `roundDecimal` / `RoundingPolicySchema` / `RoundingPolicy` / `RoundingModeSchema` / `RoundingMode` | functions, schemas, _types_ | a rounding table as data, by magnitude, and its modes |
195
+ | `DecimalStringSchema` / `DecimalInputSchema` | schemas | one canonical decimal spelling, and the input form that reaches it; a number is refused |
175
196
  | `Money` / `MoneyShare` / `MoneySplit` | _types_ | currency-literal value and remainder-bearing operation results |
176
197
  | `defineUnitSystem` / `createQuantitySchema` / `addQuantity` | functions | exact decimal quantities and caller-declared finite conversions |
177
198
  | `Quantity` / `UnitConversion` / `QuantityProjection` | _types_ | unit-literal value, rational conversion and recorded/derived provenance |
@@ -60,7 +60,7 @@ own, recorded as an ADR.
60
60
  | `stitchkit/realtime` | browser, React Native/Hermes **and** server | evolving | typed realtime clients and retained topics with a required explicit Socket.IO peer loader |
61
61
  | `stitchkit/contract` | browser **and** server | stable | the contract layer alone — `defineContract`, errors, pagination |
62
62
  | `stitchkit/live` | browser **and** server | evolving | `defineEvents` — topic declarations beside the operation contract — and watched reads: `createWatchClient`, the value/difference frame and its reassembly |
63
- | `stitchkit/primitives` | browser **and** server | evolving | generic values and declarations for lifecycle, access, audit, delivery and exports |
63
+ | `stitchkit/primitives` | browser **and** server | evolving | generic values and declarations for lifecycle, access, audit, delivery and exports, exact money and rounding tables |
64
64
  | `stitchkit/server` | server (Bun) | stable | `createServer`, `implement`, hooks, auth, Socket.IO server, server primitives |
65
65
  | `stitchkit/node` | server (Node ≥ 22) | stable | `serveNode` + the runtime-agnostic core — the Node mirror of `/server` |
66
66
  | `stitchkit/tools` | server | stable | `createMcpHandler`, `mountMcp`, `mountAgent`, the OAuth provider, native tools |
@@ -75,24 +75,27 @@ own, recorded as an ADR.
75
75
  | `stitchkit/process/owner-loss` | bundled server entry (Bun, POSIX) | evolving | narrow bootstrap that keeps the process runner lazy while carrying its owner-loss guard in a single-file bundle |
76
76
  | `stitchkit/files/packaging` | build time (Bun or Node) | evolving | installed native asset graph, integrity, Bun packaging plugin and the artifact loader check; no runtime install policy |
77
77
  | `stitchkit/files` | server (Bun or Node) | stable | peer-free managed local-file boundary |
78
- | `stitchkit/telegram` | server (Bun or Node) | evolving | peer-free Telegram platform primitives — Mini App `initData` verification, send-failure classification, one outbound budget per bot token with weighted albums and shared 429 pauses, resumable broadcasts, the operator channel with dedupe, a Bot API transport that separates a request that never left from an unknown outcome, local Bot API files, webhook ownership and durable webhook update intake |
79
- | `stitchkit/telegram/grammy` | server (Bun or Node) | evolving | the token's outbound budget as one grammY client transformer — a 429 that comes back as a response pauses the token, and a cancelled wait is a request that never left |
78
+ | `stitchkit/telegram` | server (Bun or Node) | evolving | peer-free Telegram platform primitives — Mini App `initData` verification, send-failure classification, one outbound budget per bot token with weighted albums and per-chat 429 pauses, resumable broadcasts, the operator channel with dedupe, a Bot API transport that separates a request that never left from an unknown outcome, local Bot API files, webhook ownership and durable webhook update intake |
79
+ | `stitchkit/telegram/grammy` | server (Bun or Node) | evolving | the token's outbound budget as one grammY client transformer — a 429 that comes back as a response pauses its chat, and a cancelled wait is a request that never left |
80
80
  | `stitchkit/telegram/html` | browser and server | evolving | Telegram's HTML as a tree — clean any markup to what Telegram accepts, cut long text into valid parts by what the reader sees, check markup before it is sent |
81
81
  | `stitchkit/telegram/screens` | server (Bun or Node) | evolving | a bot's menus as declared screens over grammY — typed paths, actions and input, message reconciliation, state in any `StorageAdapter`, a test chat |
82
82
  | `stitchkit/tracking` | browser **and** server | evolving | visitor-tracking mechanics — `createTrackingClient`, the tab-shared outbox, the page-leave beacon, attribution, the contract factory; no event vocabulary, no React |
83
+ | `stitchkit/tracking/contract` | browser **and** server | evolving | the wire shapes — the contract factory, event and visit schemas, the performance sample and its trust threshold; brings `zod` |
84
+ | `stitchkit/tracking/performance` | browser **and** server | evolving | Web Vitals from real visitors, collected after load through the optional peer `web-vitals`; no `zod` |
83
85
  | `stitchkit/tracking/server` | server (Bun or Node) | evolving | the decisions a tracking backend makes — dispositions, visit lease over an application-owned store, active intervals, presence; no database |
84
86
  | `stitchkit/release` | browser **and** server | evolving | a page follows the release it was built for — `createReleaseMarker` on the server, `createReleaseWatcher` in the browser, the `X-Build-Id` header and a socket event between them |
85
87
  | `stitchkit/voice` | browser **and** server | evolving | the mechanics of a live voice reply — `SentenceCutter`, `speakableText`, a `SpeechQueue` that synthesises ahead and stops on interruption, the conversation phases |
86
88
  | `stitchkit/geo` | server (Bun or Node) | evolving | managed GeoIP reader generations, last-known-good reload and the optional MaxMind adapter |
89
+ | `stitchkit/xlsx` | browser **and** server | evolving | a workbook from rows and typed columns, with no dependency; text never runs as a formula |
87
90
  | `stitchkit/oauth` | browser **and** server | evolving | provider-neutral Authorization Code + PKCE request and one-shot callback transaction mechanics |
88
91
  | `stitchkit/google` | server (Bun or Node) | evolving | optional Google code exchange and verified OIDC identity adapter |
89
- | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 61 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
92
+ | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 63 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
90
93
  | `stitchkit/testing` | tests on Bun or Node | stable | in-process generated clients over a real Fetch handler, the managed-resource conformance kit and manual time for schedules and retries |
91
94
  | `stitchkit/declaration` | browser + build and deployment tooling (Bun or Node) | evolving | `ProjectDeclarationSchema` — the one machine-readable statement a repository makes about itself |
92
95
  | `stitchkit/react` | browser + server rendering | stable | `createCursorQuery`, `createCacheBridge`, QueryClient and `ApiError` retry policy |
93
96
  | `stitchkit/react/keyboard` | browser | evolving | which part of a screen gets a key — ordered layers, one Escape per level, list zones with real focus; see [keyboard guide](keyboard.md) |
94
97
  | `stitchkit/react/keyboard/testing` | server (Bun or Node) | evolving | the keyboard layers and zones without a DOM — fakes for the window, elements and key events beside the two engines, to test the order of layers, `scope`/`inert` and the edges of a zone in milliseconds |
95
- | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 25 of the 61 minors since 0.56.2, most recently 0.115.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
98
+ | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 25 of the 63 minors since 0.56.2, most recently 0.115.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
96
99
  | `stitchkit/agent-runtime/sandbox` | server | evolving | optional Linux Bubblewrap sessions, durable workspaces and a host HTTP credential gateway; see [sandbox guide](sandbox.md) |
97
100
  | `stitchkit/agent-runtime/testing` | tests on Bun or Node | evolving | credential-free replay, scripted provider faults, deterministic race controls and the agent-store conformance kit |
98
101
  | `stitchkit/agent-runtime/harness` | server | evolving | resource-aware process-local facade over the canonical Agent runtime; supervision stays outside |
@@ -104,7 +107,7 @@ own, recorded as an ADR.
104
107
  | `stitchkit/agent-runtime/sqlite/bun` | server (Bun) | evolving | durable built-in SQLite store for the agent runtime |
105
108
  | `stitchkit/agent-runtime/sqlite/node` | server (Node ≥ 22.5) | evolving | durable built-in SQLite store for the agent runtime |
106
109
  | `stitchkit-tui` | terminal (Bun) | evolving | optional official OpenTUI host over a caller-composed headless runtime |
107
- | `stitchkit/application` | browser + server | evolving<br>_redefined in 14 of the 61 minors since 0.56.2, most recently 0.110.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
110
+ | `stitchkit/application` | browser + server | evolving<br>_redefined in 14 of the 63 minors since 0.56.2, most recently 0.110.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
108
111
  | `stitchkit/application/grammy` | server | evolving | a grammY bot as application resources — configuration, then polling with updates admitted by batch — and the webhook adapter |
109
112
  | `stitchkit/application/opentelemetry` | server | evolving | maps application snapshots onto an injected OpenTelemetry `Meter` |
110
113
  | `stitchkit/application/schemas` | browser + server | evolving | the application's snapshot, health and shutdown schemas alone, without the kernel |