@nyte-ai/host 0.0.0-stage → 0.0.18

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 (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +6 -2
  3. package/THIRD-PARTY-NOTICES.md +800 -0
  4. package/dist/chunks/canvas-preview-0cmbkp2j.js +65 -0
  5. package/dist/chunks/canvas-preview-0nq75h9k.js +7 -0
  6. package/dist/chunks/canvas-preview-0nrnbt76.js +497 -0
  7. package/dist/chunks/canvas-preview-1sq7z9jq.js +17 -0
  8. package/dist/chunks/canvas-preview-1ta3avah.js +56 -0
  9. package/dist/chunks/canvas-preview-2zdyh9ny.js +26 -0
  10. package/dist/chunks/canvas-preview-31w7xm8z.js +34 -0
  11. package/dist/chunks/canvas-preview-4b6sayhg.js +295 -0
  12. package/dist/chunks/canvas-preview-4e0pxa32.js +63 -0
  13. package/dist/chunks/canvas-preview-518dh8by.js +169 -0
  14. package/dist/chunks/canvas-preview-5hxat7hh.js +239 -0
  15. package/dist/chunks/canvas-preview-5mex725c.js +14 -0
  16. package/dist/chunks/canvas-preview-5z63am63.js +295 -0
  17. package/dist/chunks/canvas-preview-65xqjw7f.js +20 -0
  18. package/dist/chunks/canvas-preview-69fkk9yn.js +95 -0
  19. package/dist/chunks/canvas-preview-75db60xy.js +457 -0
  20. package/dist/chunks/canvas-preview-76fwvd6e.js +272 -0
  21. package/dist/chunks/canvas-preview-8xgt67ka.js +598 -0
  22. package/dist/chunks/canvas-preview-98aj5p34.js +176 -0
  23. package/dist/chunks/canvas-preview-9aqczacs.js +73 -0
  24. package/dist/chunks/canvas-preview-a3yw0j70.js +72 -0
  25. package/dist/chunks/canvas-preview-azg56359.js +68 -0
  26. package/dist/chunks/canvas-preview-d9wwhbtz.js +240 -0
  27. package/dist/chunks/canvas-preview-ehf3vp31.js +411 -0
  28. package/dist/chunks/canvas-preview-evh92ywd.js +369 -0
  29. package/dist/chunks/canvas-preview-ewgspmsd.js +81 -0
  30. package/dist/chunks/canvas-preview-g3qj3y3k.js +156 -0
  31. package/dist/chunks/canvas-preview-h8hshnff.js +63 -0
  32. package/dist/chunks/canvas-preview-j1tnf51w.js +36 -0
  33. package/dist/chunks/canvas-preview-kdqgrstc.js +194 -0
  34. package/dist/chunks/canvas-preview-kn7kvbfj.js +12 -0
  35. package/dist/chunks/canvas-preview-m02v4yy6.js +386 -0
  36. package/dist/chunks/canvas-preview-mgcx2b2p.js +271 -0
  37. package/dist/chunks/canvas-preview-rp4x6y1h.js +144 -0
  38. package/dist/chunks/canvas-preview-rp6fz0w5.js +130 -0
  39. package/dist/chunks/canvas-preview-s94ebwf5.js +112 -0
  40. package/dist/chunks/canvas-preview-senpjwep.js +518 -0
  41. package/dist/chunks/canvas-preview-skzwvw4d.js +23 -0
  42. package/dist/chunks/canvas-preview-srgfpdmf.js +60 -0
  43. package/dist/chunks/canvas-preview-tjhabynd.js +252 -0
  44. package/dist/chunks/canvas-preview-vaatfznm.js +189 -0
  45. package/dist/chunks/canvas-preview-vax9ne4e.js +341 -0
  46. package/dist/chunks/canvas-preview-wg80rbc2.js +46 -0
  47. package/dist/chunks/canvas-preview-xn10d4f8.js +608 -0
  48. package/dist/chunks/canvas-preview-yjz0f7n4.js +50 -0
  49. package/dist/chunks/canvas-preview-ymgz0937.js +587 -0
  50. package/dist/chunks/canvas-preview-yrfz2ak6.js +134 -0
  51. package/dist/chunks/canvas-preview-zaaj99wd.js +244 -0
  52. package/dist/chunks/canvas-preview-zn2d0k9d.js +133 -0
  53. package/dist/src/canvas-preview.d.ts +29 -0
  54. package/dist/src/canvas-preview.js +267 -0
  55. package/dist/src/credentials.d.ts +44 -0
  56. package/dist/src/credentials.js +10 -0
  57. package/dist/src/deploy/cloudflare/worker.d.ts +50 -0
  58. package/dist/src/deploy/cloudflare/worker.js +196 -0
  59. package/dist/src/deploy/vercel/nitro.config.d.ts +2 -0
  60. package/dist/src/deploy/vercel/nitro.config.js +30 -0
  61. package/dist/src/deploy/vercel/server/routes/[...].d.ts +2 -0
  62. package/dist/src/deploy/vercel/server/routes/[...].js +18 -0
  63. package/dist/src/deploy/vercel/server/utils/host.d.ts +13 -0
  64. package/dist/src/deploy/vercel/server/utils/host.js +7 -0
  65. package/dist/src/deploy/vercel/server/utils/repair.d.ts +1 -0
  66. package/dist/src/deploy/vercel/server/utils/repair.js +6 -0
  67. package/dist/src/deploy/vercel/server/utils/step.d.ts +10 -0
  68. package/dist/src/deploy/vercel/server/utils/step.js +6 -0
  69. package/dist/src/deploy/vercel/server/workflows/drive.d.ts +14 -0
  70. package/dist/src/deploy/vercel/server/workflows/drive.js +13 -0
  71. package/dist/src/durable-object.d.ts +14 -0
  72. package/dist/src/durable-object.js +231 -0
  73. package/dist/src/hash.d.ts +1 -0
  74. package/dist/src/hash.js +6 -0
  75. package/dist/src/identity-key.d.ts +11 -0
  76. package/dist/src/identity-key.js +9 -0
  77. package/dist/src/identity.d.ts +12 -0
  78. package/dist/src/identity.js +6 -0
  79. package/dist/src/index.d.ts +21 -0
  80. package/dist/src/index.js +120 -0
  81. package/dist/src/key-file.d.ts +1 -0
  82. package/dist/src/key-file.js +7 -0
  83. package/dist/src/listen-fetch.d.ts +8 -0
  84. package/dist/src/listen-fetch.js +9 -0
  85. package/dist/src/listen.d.ts +4 -0
  86. package/dist/src/listen.js +10 -0
  87. package/dist/src/local/command.d.ts +15 -0
  88. package/dist/src/local/command.js +8 -0
  89. package/dist/src/local/feed.d.ts +7 -0
  90. package/dist/src/local/feed.js +6 -0
  91. package/dist/src/local/files.d.ts +18 -0
  92. package/dist/src/local/files.js +13 -0
  93. package/dist/src/local/git-watch.d.ts +15 -0
  94. package/dist/src/local/git-watch.js +7 -0
  95. package/dist/src/local/git.d.ts +5 -0
  96. package/dist/src/local/git.js +13 -0
  97. package/dist/src/local/github.d.ts +30 -0
  98. package/dist/src/local/github.js +9 -0
  99. package/dist/src/local/identity.d.ts +3 -0
  100. package/dist/src/local/identity.js +7 -0
  101. package/dist/src/local/jobs.d.ts +7 -0
  102. package/dist/src/local/jobs.js +6 -0
  103. package/dist/src/local/legacy-trust.d.ts +10 -0
  104. package/dist/src/local/legacy-trust.js +6 -0
  105. package/dist/src/local/patch.d.ts +16 -0
  106. package/dist/src/local/patch.js +17 -0
  107. package/dist/src/local/provider.d.ts +11 -0
  108. package/dist/src/local/provider.js +20 -0
  109. package/dist/src/local/snapshots.d.ts +7 -0
  110. package/dist/src/local/snapshots.js +11 -0
  111. package/dist/src/local/text.d.ts +1 -0
  112. package/dist/src/local/text.js +6 -0
  113. package/dist/src/local/tree.d.ts +50 -0
  114. package/dist/src/local/tree.js +16 -0
  115. package/dist/src/local/workspace-migration.d.ts +2 -0
  116. package/dist/src/local/workspace-migration.js +7 -0
  117. package/dist/src/local/worktrees.d.ts +46 -0
  118. package/dist/src/local/worktrees.js +14 -0
  119. package/dist/src/mcp/config.d.ts +75 -0
  120. package/dist/src/mcp/config.js +12 -0
  121. package/dist/src/mcp/connect.d.ts +28 -0
  122. package/dist/src/mcp/connect.js +9 -0
  123. package/dist/src/mcp/hub.d.ts +19 -0
  124. package/dist/src/mcp/hub.js +11 -0
  125. package/dist/src/mcp/oauth.d.ts +46 -0
  126. package/dist/src/mcp/oauth.js +12 -0
  127. package/dist/src/mcp/tools.d.ts +29 -0
  128. package/dist/src/mcp/tools.js +12 -0
  129. package/dist/src/open.d.ts +42 -0
  130. package/dist/src/open.js +44 -0
  131. package/dist/src/plugins/loader.d.ts +21 -0
  132. package/dist/src/plugins/loader.js +11 -0
  133. package/dist/src/postgres.d.ts +19 -0
  134. package/dist/src/postgres.js +8 -0
  135. package/dist/src/providers.d.ts +16 -0
  136. package/dist/src/providers.js +112 -0
  137. package/dist/src/secrets.d.ts +12 -0
  138. package/dist/src/secrets.js +8 -0
  139. package/dist/src/serve/binding.d.ts +39 -0
  140. package/dist/src/serve/binding.js +6 -0
  141. package/dist/src/serve/handler.d.ts +15 -0
  142. package/dist/src/serve/handler.js +8 -0
  143. package/dist/src/serve/stream-server.d.ts +6 -0
  144. package/dist/src/serve/stream-server.js +6 -0
  145. package/dist/src/session-index.d.ts +11 -0
  146. package/dist/src/session-index.js +11 -0
  147. package/dist/src/shell-env.d.ts +14 -0
  148. package/dist/src/shell-env.js +108 -0
  149. package/dist/src/sqlite-workers.d.ts +6 -0
  150. package/dist/src/sqlite-workers.js +6 -0
  151. package/dist/src/sqlite.d.ts +7 -0
  152. package/dist/src/sqlite.js +10 -0
  153. package/dist/src/store-owner.d.ts +15 -0
  154. package/dist/src/store-owner.js +9 -0
  155. package/dist/src/store-rows.d.ts +13 -0
  156. package/dist/src/store-rows.js +26 -0
  157. package/dist/src/store-usage.d.ts +25 -0
  158. package/dist/src/store-usage.js +16 -0
  159. package/dist/src/usage-scan.d.ts +24 -0
  160. package/dist/src/usage-scan.js +65 -0
  161. package/dist/src/usage-service.d.ts +22 -0
  162. package/dist/src/usage-service.js +12 -0
  163. package/dist/src/usage-summary.d.ts +9 -0
  164. package/dist/src/usage-summary.js +16 -0
  165. package/dist/src/usage-types.d.ts +86 -0
  166. package/dist/src/usage-types.js +0 -0
  167. package/dist/src/usage-worker.d.ts +1 -0
  168. package/dist/src/usage-worker.js +25 -0
  169. package/dist/src/usage.d.ts +72 -0
  170. package/dist/src/usage.js +13 -0
  171. package/package.json +132 -3
  172. package/src/canvas-preview.ts +402 -0
  173. package/src/credentials.ts +294 -0
  174. package/src/deploy/cloudflare/README.md +3 -0
  175. package/src/deploy/cloudflare/worker.ts +306 -0
  176. package/src/deploy/cloudflare/wrangler.jsonc +12 -0
  177. package/src/deploy/vercel/README.md +3 -0
  178. package/src/deploy/vercel/nitro.config.ts +29 -0
  179. package/src/deploy/vercel/server/routes/[...].ts +10 -0
  180. package/src/deploy/vercel/server/utils/host.ts +104 -0
  181. package/src/deploy/vercel/server/utils/repair.ts +35 -0
  182. package/src/deploy/vercel/server/utils/step.ts +25 -0
  183. package/src/deploy/vercel/server/workflows/drive.ts +46 -0
  184. package/src/deploy/vercel/tsconfig.json +9 -0
  185. package/src/deploy/vercel/types/bun.d.ts +2 -0
  186. package/src/durable-object.ts +386 -0
  187. package/src/hash.ts +5 -0
  188. package/src/identity-key.ts +20 -0
  189. package/src/identity.ts +66 -0
  190. package/src/index.ts +21 -0
  191. package/src/key-file.ts +53 -0
  192. package/src/listen-fetch.ts +409 -0
  193. package/src/listen.ts +228 -0
  194. package/src/local/command.ts +109 -0
  195. package/src/local/feed.ts +70 -0
  196. package/src/local/files.ts +812 -0
  197. package/src/local/git-watch.ts +189 -0
  198. package/src/local/git.ts +914 -0
  199. package/src/local/github.ts +692 -0
  200. package/src/local/identity.ts +21 -0
  201. package/src/local/jobs.ts +587 -0
  202. package/src/local/legacy-trust.ts +105 -0
  203. package/src/local/patch.ts +334 -0
  204. package/src/local/provider.ts +184 -0
  205. package/src/local/snapshots.ts +776 -0
  206. package/src/local/text.ts +9 -0
  207. package/src/local/tree.ts +398 -0
  208. package/src/local/workspace-migration.ts +95 -0
  209. package/src/local/worktrees.ts +239 -0
  210. package/src/mcp/config.ts +330 -0
  211. package/src/mcp/connect.ts +105 -0
  212. package/src/mcp/hub.ts +836 -0
  213. package/src/mcp/oauth.ts +436 -0
  214. package/src/mcp/tools.ts +333 -0
  215. package/src/open.ts +469 -0
  216. package/src/plugins/loader.ts +186 -0
  217. package/src/postgres.ts +492 -0
  218. package/src/providers.ts +135 -0
  219. package/src/secrets.ts +31 -0
  220. package/src/serve/binding.ts +628 -0
  221. package/src/serve/handler.ts +362 -0
  222. package/src/serve/stream-server.ts +176 -0
  223. package/src/session-index.ts +99 -0
  224. package/src/shell-env.ts +153 -0
  225. package/src/sqlite-workers.ts +283 -0
  226. package/src/sqlite.ts +528 -0
  227. package/src/store-owner.ts +98 -0
  228. package/src/store-rows.ts +110 -0
  229. package/src/store-usage.ts +344 -0
  230. package/src/usage-scan.ts +81 -0
  231. package/src/usage-service.ts +73 -0
  232. package/src/usage-summary.ts +79 -0
  233. package/src/usage-types.ts +87 -0
  234. package/src/usage-worker.ts +24 -0
  235. package/src/usage.ts +701 -0
@@ -0,0 +1,13 @@
1
+ import type { ByteReader, Ref, Revision, SessionEvent } from "@nyte-ai/schema";
2
+ import type { LoggedRow, StoredObject, StoredRecord } from "@nyte-ai/core/store";
3
+ export declare function prefixEnd(prefix: string): string | null;
4
+ export declare function mintRevision(): Revision;
5
+ export declare function decodeEvent(seq: number, at: number, text: string): SessionEvent;
6
+ export declare function parseNumber(value: unknown): number;
7
+ export declare function parseText(value: unknown): string | null;
8
+ export declare function parseRef(row: Readonly<Record<string, unknown>>): Ref;
9
+ export declare function parseStoredRecord(row: Readonly<Record<string, unknown>>): StoredRecord;
10
+ export declare function parseStoredObject(row: Readonly<Record<string, unknown>>): StoredObject;
11
+ export declare function loggedRow(row: Readonly<Record<string, unknown>>): LoggedRow;
12
+ export declare function collect(bytes: AsyncIterable<Uint8Array>): Promise<Uint8Array>;
13
+ export declare function memoryReader(bytes: Uint8Array): ByteReader;
@@ -0,0 +1,26 @@
1
+ import {
2
+ prefixEnd2,
3
+ mintRevision2,
4
+ decodeEvent2,
5
+ parseNumber2,
6
+ parseText2,
7
+ parseRef2,
8
+ parseStoredRecord2,
9
+ parseStoredObject2,
10
+ loggedRow2,
11
+ collect2,
12
+ memoryReader2
13
+ } from "../chunks/canvas-preview-69fkk9yn.js";
14
+ export {
15
+ collect2 as collect,
16
+ decodeEvent2 as decodeEvent,
17
+ loggedRow2 as loggedRow,
18
+ memoryReader2 as memoryReader,
19
+ mintRevision2 as mintRevision,
20
+ parseNumber2 as parseNumber,
21
+ parseRef2 as parseRef,
22
+ parseStoredObject2 as parseStoredObject,
23
+ parseStoredRecord2 as parseStoredRecord,
24
+ parseText2 as parseText,
25
+ prefixEnd2 as prefixEnd
26
+ };
@@ -0,0 +1,25 @@
1
+ import type { SessionId, Usage } from "@nyte-ai/schema";
2
+ import type { UsageReport, UsageSubject, UsageWindow } from "./usage-types.ts";
3
+ export interface UsageRecord {
4
+ readonly at: number;
5
+ readonly subject: UsageSubject;
6
+ readonly usage: Usage;
7
+ }
8
+ export interface SessionUsage {
9
+ readonly sessionId: SessionId;
10
+ readonly name: string | undefined;
11
+ readonly records: readonly UsageRecord[];
12
+ readonly lastActivityAt?: number;
13
+ }
14
+ export interface StoreRead {
15
+ readonly workspacePath: string | null;
16
+ readonly sessions: readonly SessionUsage[];
17
+ readonly failure: {
18
+ readonly message: string;
19
+ } | null;
20
+ }
21
+ export declare const USAGE_EVENTS = "SELECT session, seq, at, event FROM log WHERE json_extract(event, '$.kind') = 'request' OR (json_extract(event, '$.kind') = 'run' AND json_extract(event, '$.change') = 'started') ORDER BY session, seq";
22
+ export declare function localDay(at: number): string;
23
+ export declare function shiftDay(day: string, delta: number): string;
24
+ export declare function projectUsageReport(stores: readonly StoreRead[], window: UsageWindow, readAt: number): UsageReport;
25
+ export declare function readNyteUsage(home: string, window: UsageWindow): UsageReport;
@@ -0,0 +1,16 @@
1
+ import {
2
+ USAGE_EVENTS2,
3
+ localDay2,
4
+ shiftDay2,
5
+ projectUsageReport2,
6
+ readNyteUsage2
7
+ } from "../chunks/canvas-preview-5hxat7hh.js";
8
+ import"../chunks/canvas-preview-srgfpdmf.js";
9
+ import"../chunks/canvas-preview-69fkk9yn.js";
10
+ export {
11
+ USAGE_EVENTS2 as USAGE_EVENTS,
12
+ localDay2 as localDay,
13
+ projectUsageReport2 as projectUsageReport,
14
+ readNyteUsage2 as readNyteUsage,
15
+ shiftDay2 as shiftDay
16
+ };
@@ -0,0 +1,24 @@
1
+ import type { UsageScan, UsageScanReader, UsageScanRequest } from "./usage-service.ts";
2
+ export interface UsageWorkerRequest extends UsageScanRequest {
3
+ readonly id: number;
4
+ readonly home: string;
5
+ }
6
+ export type UsageWorkerReply = {
7
+ readonly id: number;
8
+ readonly scan: UsageScan;
9
+ } | {
10
+ readonly id: number;
11
+ readonly error: string;
12
+ };
13
+ export declare class UsageScanWorker implements UsageScanReader {
14
+ private readonly home;
15
+ private readonly entry;
16
+ private worker;
17
+ private nextId;
18
+ private readonly pending;
19
+ constructor(home: string, entry: string | URL);
20
+ scan(request: UsageScanRequest): Promise<UsageScan>;
21
+ close(): Promise<void>;
22
+ private spawn;
23
+ private fail;
24
+ }
@@ -0,0 +1,65 @@
1
+ // src/usage-scan.ts
2
+ import { Worker } from "node:worker_threads";
3
+
4
+ class UsageScanWorker {
5
+ home;
6
+ entry;
7
+ worker;
8
+ nextId = 1;
9
+ pending = new Map;
10
+ constructor(home, entry) {
11
+ this.home = home;
12
+ this.entry = entry;
13
+ }
14
+ async scan(request) {
15
+ const worker = this.spawn();
16
+ const id = this.nextId++;
17
+ return new Promise((resolve, reject) => {
18
+ this.pending.set(id, { resolve, reject });
19
+ try {
20
+ worker.postMessage({ id, home: this.home, ...request });
21
+ } catch (cause) {
22
+ this.pending.delete(id);
23
+ reject(cause);
24
+ }
25
+ });
26
+ }
27
+ async close() {
28
+ const worker = this.worker;
29
+ if (worker === undefined)
30
+ return;
31
+ this.fail(worker, new Error("Usage worker closed."));
32
+ await worker.terminate();
33
+ }
34
+ spawn() {
35
+ if (this.worker !== undefined)
36
+ return this.worker;
37
+ const worker = new Worker(this.entry);
38
+ worker.unref();
39
+ worker.on("message", (reply) => {
40
+ const request = this.pending.get(reply.id);
41
+ this.pending.delete(reply.id);
42
+ if ("scan" in reply)
43
+ request?.resolve(reply.scan);
44
+ else
45
+ request?.reject(new Error(reply.error));
46
+ });
47
+ worker.on("error", (cause) => this.fail(worker, cause));
48
+ worker.on("exit", (code) => {
49
+ this.fail(worker, new Error(`Usage worker exited with code ${String(code)}.`));
50
+ });
51
+ this.worker = worker;
52
+ return worker;
53
+ }
54
+ fail(worker, cause) {
55
+ if (this.worker !== worker)
56
+ return;
57
+ this.worker = undefined;
58
+ for (const request of this.pending.values())
59
+ request.reject(cause);
60
+ this.pending.clear();
61
+ }
62
+ }
63
+ export {
64
+ UsageScanWorker
65
+ };
@@ -0,0 +1,22 @@
1
+ import type { Models } from "@nyte-ai/ai";
2
+ import type { Api, Model } from "@nyte-ai/schema/model";
3
+ import type { UsageSnapshot, UsageWindow } from "./usage-types.ts";
4
+ export interface UsageScanRequest {
5
+ readonly window: UsageWindow;
6
+ readonly catalog?: readonly Model<Api>[];
7
+ }
8
+ export type UsageScan = UsageSnapshot;
9
+ export interface UsageScanReader {
10
+ scan(request: UsageScanRequest): Promise<UsageScan>;
11
+ close(): Promise<void>;
12
+ }
13
+ export declare function catalogForUsage(models: Pick<Models, "getModels">): readonly Model<Api>[];
14
+ export declare class UsageScanner implements UsageScanReader {
15
+ private readonly home;
16
+ private readonly caches;
17
+ private readonly models;
18
+ private readonly scans;
19
+ constructor(home: string);
20
+ scan(request: UsageScanRequest): Promise<UsageScan>;
21
+ close(): Promise<void>;
22
+ }
@@ -0,0 +1,12 @@
1
+ import {
2
+ catalogForUsage2,
3
+ UsageScanner2
4
+ } from "../chunks/canvas-preview-1ta3avah.js";
5
+ import"../chunks/canvas-preview-0nrnbt76.js";
6
+ import"../chunks/canvas-preview-5hxat7hh.js";
7
+ import"../chunks/canvas-preview-srgfpdmf.js";
8
+ import"../chunks/canvas-preview-69fkk9yn.js";
9
+ export {
10
+ UsageScanner2 as UsageScanner,
11
+ catalogForUsage2 as catalogForUsage
12
+ };
@@ -0,0 +1,9 @@
1
+ import type { Usage } from "@nyte-ai/schema";
2
+ import type { Usage as ModelUsageCounts } from "@nyte-ai/schema/model";
3
+ import type { ModelUsage, UsageSummary } from "./usage-types.ts";
4
+ export declare function emptyModelUsage(): ModelUsageCounts;
5
+ export declare function recordedUsage(usage: ModelUsageCounts): Usage;
6
+ export declare function emptyUsageSummary(): UsageSummary;
7
+ export declare function summarizeModels(rows: readonly ModelUsage[]): UsageSummary;
8
+ export declare function cacheSavings(usage: Usage): number;
9
+ export declare function usageTokens(usage: Usage): number;
@@ -0,0 +1,16 @@
1
+ import {
2
+ emptyModelUsage2,
3
+ recordedUsage2,
4
+ emptyUsageSummary2,
5
+ summarizeModels2,
6
+ cacheSavings2,
7
+ usageTokens2
8
+ } from "../chunks/canvas-preview-srgfpdmf.js";
9
+ export {
10
+ cacheSavings2 as cacheSavings,
11
+ emptyModelUsage2 as emptyModelUsage,
12
+ emptyUsageSummary2 as emptyUsageSummary,
13
+ recordedUsage2 as recordedUsage,
14
+ summarizeModels2 as summarizeModels,
15
+ usageTokens2 as usageTokens
16
+ };
@@ -0,0 +1,86 @@
1
+ import type { SessionId, Usage } from "@nyte-ai/schema";
2
+ export interface UsageWindow {
3
+ readonly sinceDay: string | null;
4
+ readonly untilDay: string;
5
+ }
6
+ export interface UsageTotals {
7
+ readonly input: number;
8
+ readonly output: number;
9
+ readonly cacheRead: number;
10
+ readonly cacheWrite: number;
11
+ readonly reasoning: number;
12
+ readonly tokens: number;
13
+ readonly cost: number;
14
+ readonly cacheSavings: number;
15
+ }
16
+ export type UsageSubject = {
17
+ readonly kind: "model";
18
+ readonly provider: string;
19
+ readonly model: string;
20
+ } | {
21
+ readonly kind: "tool";
22
+ } | {
23
+ readonly kind: "compaction";
24
+ };
25
+ export interface UsageEntry {
26
+ readonly day: string;
27
+ readonly workspacePath: string | null;
28
+ readonly sessionId: SessionId;
29
+ readonly subject: UsageSubject;
30
+ readonly totals: UsageTotals;
31
+ }
32
+ export interface UsageSession {
33
+ readonly sessionId: SessionId;
34
+ readonly name?: string;
35
+ readonly workspacePath: string | null;
36
+ readonly lastActivityAt: number;
37
+ }
38
+ export interface UsageSource {
39
+ readonly workspacePath: string | null;
40
+ readonly status: "ok" | "failed";
41
+ readonly sessions: number;
42
+ readonly message: string | null;
43
+ }
44
+ export interface UsageReport {
45
+ readonly readAt: number;
46
+ readonly sinceDay: string;
47
+ readonly untilDay: string;
48
+ readonly entries: readonly UsageEntry[];
49
+ readonly sessions: readonly UsageSession[];
50
+ readonly sources: readonly UsageSource[];
51
+ readonly previous?: {
52
+ readonly cost: number;
53
+ readonly tokens: number;
54
+ };
55
+ readonly earliestDay?: string;
56
+ }
57
+ export interface ModelUsage {
58
+ readonly provider: string;
59
+ readonly model: string;
60
+ readonly turns: number;
61
+ readonly usage: Usage;
62
+ }
63
+ export interface UsageSummary {
64
+ readonly models: readonly ModelUsage[];
65
+ readonly compaction: Usage;
66
+ readonly tools: Usage;
67
+ readonly total: Usage;
68
+ readonly cacheSavings: number;
69
+ }
70
+ export type LocalHistoryUsage = {
71
+ readonly kind: "missing";
72
+ } | {
73
+ readonly kind: "failed";
74
+ readonly message: string;
75
+ } | {
76
+ readonly kind: "ready";
77
+ readonly summary: UsageSummary;
78
+ readonly unpricedRecords: number;
79
+ readonly malformedRecords: number;
80
+ readonly unreadableFiles: number;
81
+ };
82
+ export interface UsageSnapshot extends UsageReport {
83
+ readonly nyteError: string | null;
84
+ readonly claudeCode: LocalHistoryUsage;
85
+ readonly codex: LocalHistoryUsage;
86
+ }
File without changes
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ import"../chunks/canvas-preview-srgfpdmf.js";
2
+ import"../chunks/canvas-preview-69fkk9yn.js";
3
+ import"../chunks/canvas-preview-5hxat7hh.js";
4
+ import"../chunks/canvas-preview-0nrnbt76.js";
5
+ import {
6
+ UsageScanner2
7
+ } from "../chunks/canvas-preview-1ta3avah.js";
8
+
9
+ // src/usage-worker.ts
10
+ import { parentPort } from "node:worker_threads";
11
+ var port = parentPort;
12
+ if (port === null)
13
+ throw new Error("The usage worker must run on a worker thread.");
14
+ var scanner;
15
+ port.on("message", (request) => {
16
+ scanner ??= new UsageScanner2(request.home);
17
+ scanner.scan(request).then((scan) => {
18
+ port.postMessage({ id: request.id, scan });
19
+ }, (cause) => {
20
+ port.postMessage({
21
+ id: request.id,
22
+ error: cause instanceof Error ? cause.message : String(cause)
23
+ });
24
+ });
25
+ });
@@ -0,0 +1,72 @@
1
+ import { type Models } from "@nyte-ai/ai";
2
+ import type { LocalHistoryUsage } from "./usage-types.ts";
3
+ import type { Usage } from "@nyte-ai/schema/model";
4
+ export interface ClaudeCodeUsageOptions {
5
+ readonly models: Pick<Models, "getModels">;
6
+ readonly configDir?: string;
7
+ readonly signal?: AbortSignal;
8
+ readonly cache?: UsageScanCache<ClaudeCodeFileScan>;
9
+ }
10
+ export type UsageScanCache<T> = Map<string, FileScan<T>>;
11
+ export interface FileScan<T> {
12
+ readonly size: number;
13
+ readonly mtimeMs: number;
14
+ readonly scan: T;
15
+ }
16
+ export interface ClaudeCodeFileScan {
17
+ readonly keyed: readonly (readonly [string, Snapshot])[];
18
+ readonly anonymous: readonly Snapshot[];
19
+ readonly malformedRecords: number;
20
+ }
21
+ export type ClaudeCodeUsage = LocalHistoryUsage;
22
+ export interface Snapshot {
23
+ readonly model: string;
24
+ readonly usage: Usage;
25
+ readonly costUSD: number | undefined;
26
+ }
27
+ /**
28
+ * Reads Claude Code's local usage under `<configDir>/projects`. The configured root may be a
29
+ * symlink (as may a system ancestor such as macOS `/tmp`), but links below it are skipped, to
30
+ * avoid loops and duplicate history. Every read prices cached snapshots again on a copy, since
31
+ * the catalog can change between reads while a transcript does not; a snapshot that records its
32
+ * own cost keeps that total, with no invented breakdown.
33
+ */
34
+ export declare function readClaudeCodeUsage(options: ClaudeCodeUsageOptions): Promise<ClaudeCodeUsage>;
35
+ export type CodexUsage = LocalHistoryUsage;
36
+ export interface CodexUsageOptions {
37
+ readonly models: Pick<Models, "getModels">;
38
+ readonly homeDir?: string;
39
+ readonly signal?: AbortSignal;
40
+ readonly cache?: UsageScanCache<CodexFileScan>;
41
+ }
42
+ export interface CodexFileScan {
43
+ readonly modern: readonly (readonly [string, CodexRow])[];
44
+ readonly legacy: readonly CodexRow[];
45
+ readonly malformedRecords: number;
46
+ }
47
+ export interface CodexRow {
48
+ readonly model: string;
49
+ readonly usage: Usage;
50
+ }
51
+ /**
52
+ * Reads Codex's local usage from `sessions` and `archived_sessions` (where the legacy format
53
+ * lives). A `response_id` is unique across files, so one map dedups a forked rollout's repeated
54
+ * parent responses as well as repeats within a file; a file with modern records counts only
55
+ * those, since the legacy event is written beside them. Rows are priced on a copy against the
56
+ * `openai-codex` catalog, the ChatGPT-backend model ids Codex writes.
57
+ */
58
+ export declare function readCodexUsage(options: CodexUsageOptions): Promise<CodexUsage>;
59
+ export interface UsageScanCaches {
60
+ readonly claudeCode: UsageScanCache<ClaudeCodeFileScan>;
61
+ readonly codex: UsageScanCache<CodexFileScan>;
62
+ }
63
+ export declare function createUsageScanCaches(): UsageScanCaches;
64
+ export interface LocalUsage {
65
+ readonly claudeCode: LocalHistoryUsage;
66
+ readonly codex: LocalHistoryUsage;
67
+ }
68
+ export declare function readLocalUsage(options: {
69
+ readonly models: Pick<Models, "getModels">;
70
+ readonly signal?: AbortSignal;
71
+ readonly caches?: UsageScanCaches;
72
+ }): Promise<LocalUsage>;
@@ -0,0 +1,13 @@
1
+ import {
2
+ readClaudeCodeUsage2,
3
+ readCodexUsage2,
4
+ createUsageScanCaches2,
5
+ readLocalUsage2
6
+ } from "../chunks/canvas-preview-0nrnbt76.js";
7
+ import"../chunks/canvas-preview-srgfpdmf.js";
8
+ export {
9
+ createUsageScanCaches2 as createUsageScanCaches,
10
+ readClaudeCodeUsage2 as readClaudeCodeUsage,
11
+ readCodexUsage2 as readCodexUsage,
12
+ readLocalUsage2 as readLocalUsage
13
+ };
package/package.json CHANGED
@@ -1,6 +1,135 @@
1
1
  {
2
2
  "name": "@nyte-ai/host",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.0.18",
4
+ "private": false,
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/interfaces-lab/nyte.git",
9
+ "directory": "packages/host"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "src",
14
+ "LICENSE",
15
+ "THIRD-PARTY-NOTICES.md"
16
+ ],
17
+ "type": "module",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/src/index.d.ts",
21
+ "import": "./dist/src/index.js"
22
+ },
23
+ "./canvas-preview": {
24
+ "types": "./dist/src/canvas-preview.d.ts",
25
+ "import": "./dist/src/canvas-preview.js"
26
+ },
27
+ "./credentials": {
28
+ "types": "./dist/src/credentials.d.ts",
29
+ "import": "./dist/src/credentials.js"
30
+ },
31
+ "./durable-object": {
32
+ "types": "./dist/src/durable-object.d.ts",
33
+ "import": "./dist/src/durable-object.js"
34
+ },
35
+ "./identity": {
36
+ "types": "./dist/src/identity.d.ts",
37
+ "import": "./dist/src/identity.js"
38
+ },
39
+ "./listen-fetch": {
40
+ "types": "./dist/src/listen-fetch.d.ts",
41
+ "import": "./dist/src/listen-fetch.js"
42
+ },
43
+ "./providers": {
44
+ "types": "./dist/src/providers.d.ts",
45
+ "import": "./dist/src/providers.js"
46
+ },
47
+ "./secrets": {
48
+ "types": "./dist/src/secrets.d.ts",
49
+ "import": "./dist/src/secrets.js"
50
+ },
51
+ "./shell-env": {
52
+ "types": "./dist/src/shell-env.d.ts",
53
+ "import": "./dist/src/shell-env.js"
54
+ },
55
+ "./usage": {
56
+ "types": "./dist/src/usage.d.ts",
57
+ "import": "./dist/src/usage.js"
58
+ },
59
+ "./store-usage": {
60
+ "types": "./dist/src/store-usage.d.ts",
61
+ "import": "./dist/src/store-usage.js"
62
+ },
63
+ "./usage-service": {
64
+ "types": "./dist/src/usage-service.d.ts",
65
+ "import": "./dist/src/usage-service.js"
66
+ },
67
+ "./usage-scan": {
68
+ "types": "./dist/src/usage-scan.d.ts",
69
+ "import": "./dist/src/usage-scan.js"
70
+ },
71
+ "./usage-worker": {
72
+ "types": "./dist/src/usage-worker.d.ts",
73
+ "import": "./dist/src/usage-worker.js"
74
+ },
75
+ "./deploy/cloudflare": {
76
+ "types": "./dist/src/deploy/cloudflare/worker.d.ts",
77
+ "import": "./dist/src/deploy/cloudflare/worker.js"
78
+ },
79
+ "./deploy/vercel": {
80
+ "types": "./dist/src/deploy/vercel/nitro.config.d.ts",
81
+ "import": "./dist/src/deploy/vercel/nitro.config.js"
82
+ }
83
+ },
84
+ "publishConfig": {
85
+ "access": "public",
86
+ "provenance": true
87
+ },
88
+ "dependencies": {
89
+ "@earendil-works/pi-mcp": "1.3.0",
90
+ "@lydell/node-pty": "1.2.0-beta.15",
91
+ "@nyte-ai/ai": "0.0.18",
92
+ "@nyte-ai/core": "0.0.18",
93
+ "@nyte-ai/plugin": "0.0.18",
94
+ "@nyte-ai/protocol": "0.0.18",
95
+ "@nyte-ai/schema": "0.0.18",
96
+ "fflate": "0.8.3",
97
+ "ignore": "7.0.9",
98
+ "pg": "8.23.0",
99
+ "typebox": "1.3.36"
100
+ },
101
+ "devDependencies": {
102
+ "@electric-sql/pglite": "0.5.8",
103
+ "@nyte-ai/canvas": "0.0.0",
104
+ "@types/node": "^26.6.5",
105
+ "@types/pg": "8.23.1",
106
+ "fast-check": "4.10.2",
107
+ "nitro": "3.0.260903-beta",
108
+ "typescript": "6.0.3",
109
+ "vitest": "^5.0.5",
110
+ "workflow": "4.8.8"
111
+ },
112
+ "peerDependencies": {
113
+ "nitro": "3.0.260903-beta",
114
+ "workflow": "4.8.8"
115
+ },
116
+ "peerDependenciesMeta": {
117
+ "nitro": {
118
+ "optional": true
119
+ },
120
+ "workflow": {
121
+ "optional": true
122
+ }
123
+ },
124
+ "engines": {
125
+ "node": ">=26.4.0"
126
+ },
127
+ "scripts": {
128
+ "clean": "rm -rf node_modules .turbo",
129
+ "typecheck": "tsgo --noEmit && tsgo --noEmit -p src/deploy/vercel",
130
+ "test": "vitest --run",
131
+ "check:store": "node scripts/check-store.ts",
132
+ "compact:store": "node scripts/compact-store.ts",
133
+ "build:package": "bun ../../scripts/sdk-packages.mjs build host"
134
+ }
6
135
  }