@hasna/computer 0.1.8 → 0.1.9

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 (44) hide show
  1. package/LICENSE +4 -2
  2. package/README.md +73 -7
  3. package/dist/apps/ghostty/applescript.d.ts +36 -0
  4. package/dist/apps/ghostty/applescript.d.ts.map +1 -0
  5. package/dist/apps/ghostty/applescript.test.d.ts +2 -0
  6. package/dist/apps/ghostty/applescript.test.d.ts.map +1 -0
  7. package/dist/apps/ghostty/driver.d.ts +10 -0
  8. package/dist/apps/ghostty/driver.d.ts.map +1 -0
  9. package/dist/apps/registry.d.ts +5 -0
  10. package/dist/apps/registry.d.ts.map +1 -0
  11. package/dist/apps/registry.test.d.ts +2 -0
  12. package/dist/apps/registry.test.d.ts.map +1 -0
  13. package/dist/apps/types.d.ts +47 -0
  14. package/dist/apps/types.d.ts.map +1 -0
  15. package/dist/cli/index.js +1055 -91
  16. package/dist/cli/storage.d.ts +3 -0
  17. package/dist/cli/storage.d.ts.map +1 -0
  18. package/dist/cli/storage.test.d.ts +2 -0
  19. package/dist/cli/storage.test.d.ts.map +1 -0
  20. package/dist/db/storage-sync.d.ts +57 -0
  21. package/dist/db/storage-sync.d.ts.map +1 -0
  22. package/dist/db/storage-sync.test.d.ts +2 -0
  23. package/dist/db/storage-sync.test.d.ts.map +1 -0
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +84 -26
  27. package/dist/mcp/http.d.ts +16 -0
  28. package/dist/mcp/http.d.ts.map +1 -0
  29. package/dist/mcp/http.test.d.ts +2 -0
  30. package/dist/mcp/http.test.d.ts.map +1 -0
  31. package/dist/mcp/index.d.ts +1 -1
  32. package/dist/mcp/index.d.ts.map +1 -1
  33. package/dist/mcp/index.js +609 -262
  34. package/dist/mcp/server.d.ts +4 -0
  35. package/dist/mcp/server.d.ts.map +1 -0
  36. package/dist/server/index.js +34565 -8747
  37. package/dist/storage.d.ts +5 -0
  38. package/dist/storage.d.ts.map +1 -0
  39. package/dist/storage.js +5519 -0
  40. package/package.json +7 -2
  41. package/dist/cli/cloud.d.ts +0 -3
  42. package/dist/cli/cloud.d.ts.map +0 -1
  43. package/dist/db/cloud-sync.d.ts +0 -33
  44. package/dist/db/cloud-sync.d.ts.map +0 -1
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerStorageCommands(program: Command): void;
3
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/cli/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8E9D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../../src/cli/storage.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ import { PgAdapterAsync } from "./remote-storage.js";
2
+ export declare const STORAGE_TABLES: readonly ["sessions", "action_logs", "feedback"];
3
+ export declare const COMPUTER_STORAGE_TABLES: readonly ["sessions", "action_logs", "feedback"];
4
+ type StorageTable = (typeof STORAGE_TABLES)[number];
5
+ export type StorageMode = "local" | "hybrid" | "remote";
6
+ export interface StorageEnv {
7
+ name: string;
8
+ }
9
+ export declare const COMPUTER_STORAGE_ENV = "HASNA_COMPUTER_DATABASE_URL";
10
+ export declare const COMPUTER_STORAGE_FALLBACK_ENV = "COMPUTER_DATABASE_URL";
11
+ export declare const COMPUTER_STORAGE_MODE_ENV = "HASNA_COMPUTER_STORAGE_MODE";
12
+ export declare const COMPUTER_STORAGE_MODE_FALLBACK_ENV = "COMPUTER_STORAGE_MODE";
13
+ export declare const STORAGE_DATABASE_ENV: readonly ["HASNA_COMPUTER_DATABASE_URL", "COMPUTER_DATABASE_URL"];
14
+ export declare const STORAGE_MODE_ENV: readonly ["HASNA_COMPUTER_STORAGE_MODE", "COMPUTER_STORAGE_MODE"];
15
+ export interface SyncResult {
16
+ table: string;
17
+ rowsRead: number;
18
+ rowsWritten: number;
19
+ errors: string[];
20
+ }
21
+ export interface SyncMeta {
22
+ table_name: string;
23
+ last_synced_at: string | null;
24
+ direction: "push" | "pull";
25
+ }
26
+ export interface StorageStatus {
27
+ configured: boolean;
28
+ mode: StorageMode;
29
+ env: typeof STORAGE_DATABASE_ENV;
30
+ activeEnv: string | null;
31
+ service: "computer";
32
+ tables: typeof STORAGE_TABLES;
33
+ sync: SyncMeta[];
34
+ }
35
+ export declare function getStorageDatabaseEnvName(): (typeof STORAGE_DATABASE_ENV)[number] | null;
36
+ export declare function getStorageDatabaseEnv(): StorageEnv | null;
37
+ export declare function getStorageDatabaseUrl(): string | null;
38
+ export declare function getStorageMode(): StorageMode;
39
+ export declare function getStoragePg(): Promise<PgAdapterAsync>;
40
+ export declare function runStorageMigrations(remote: PgAdapterAsync): Promise<void>;
41
+ export declare function storagePush(options?: {
42
+ tables?: string[];
43
+ }): Promise<SyncResult[]>;
44
+ export declare function storagePull(options?: {
45
+ tables?: string[];
46
+ }): Promise<SyncResult[]>;
47
+ export declare function storageSync(options?: {
48
+ tables?: string[];
49
+ }): Promise<{
50
+ pull: SyncResult[];
51
+ push: SyncResult[];
52
+ }>;
53
+ export declare function getSyncMetaAll(): SyncMeta[];
54
+ export declare function getStorageStatus(): StorageStatus;
55
+ export declare function resolveTables(tables?: string[]): StorageTable[];
56
+ export {};
57
+ //# sourceMappingURL=storage-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-sync.d.ts","sourceRoot":"","sources":["../../src/db/storage-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,eAAO,MAAM,cAAc,kDAAmD,CAAC;AAC/E,eAAO,MAAM,uBAAuB,kDAAiB,CAAC;AAEtD,KAAK,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAClE,eAAO,MAAM,6BAA6B,0BAA0B,CAAC;AACrE,eAAO,MAAM,yBAAyB,gCAAgC,CAAC;AACvE,eAAO,MAAM,kCAAkC,0BAA0B,CAAC;AAC1E,eAAO,MAAM,oBAAoB,mEAAiE,CAAC;AACnG,eAAO,MAAM,gBAAgB,mEAA2E,CAAC;AAQzG,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,OAAO,oBAAoB,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,OAAO,cAAc,CAAC;IAC9B,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAaD,wBAAgB,yBAAyB,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAKxF;AAED,wBAAgB,qBAAqB,IAAI,UAAU,GAAG,IAAI,CAGzD;AAED,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAGrD;AAED,wBAAgB,cAAc,IAAI,WAAW,CAO5C;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,CAM5D;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;AAED,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAYxF;AAED,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAYxF;AAED,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAItH;AAED,wBAAgB,cAAc,IAAI,QAAQ,EAAE,CAI3C;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAWhD;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAO/D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage-sync.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-sync.test.d.ts","sourceRoot":"","sources":["../../src/db/storage-sync.test.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -27,6 +27,6 @@ export { screenshotsMatch, computeScreenHash, compareHashes } from "./lib/diff.j
27
27
  export { renderInlineImage, supportsInlineImages, detectProtocol } from "./lib/terminal-image.js";
28
28
  export type { TerminalProtocol } from "./lib/terminal-image.js";
29
29
  export { getDb, getDbPath, getDataDir, createSession, updateSession, logAction, getSession, listSessions, getActionLogs, deleteSession, getStats, searchSessions, searchActionLogs, } from "./db/index.js";
30
- export * from "./db/cloud-sync.js";
30
+ export * from "./db/storage-sync.js";
31
31
  export * from "./db/remote-storage.js";
32
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,QAAQ,EACR,WAAW,EACX,KAAK,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGrG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnH,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AACpG,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGvH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1F,YAAY,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxH,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAClG,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EACL,KAAK,EACL,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACT,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,QAAQ,EACR,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,QAAQ,EACR,WAAW,EACX,KAAK,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGrG,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnH,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AACpG,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGvH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1F,YAAY,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxH,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAClG,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EACL,KAAK,EACL,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACT,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,QAAQ,EACR,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -15357,32 +15357,67 @@ class PgAdapterAsync {
15357
15357
  }
15358
15358
  }
15359
15359
 
15360
- // src/db/cloud-sync.ts
15361
- var CLOUD_TABLES = ["sessions", "action_logs", "feedback"];
15360
+ // src/db/storage-sync.ts
15361
+ var STORAGE_TABLES = ["sessions", "action_logs", "feedback"];
15362
+ var COMPUTER_STORAGE_TABLES = STORAGE_TABLES;
15363
+ var COMPUTER_STORAGE_ENV = "HASNA_COMPUTER_DATABASE_URL";
15364
+ var COMPUTER_STORAGE_FALLBACK_ENV = "COMPUTER_DATABASE_URL";
15365
+ var COMPUTER_STORAGE_MODE_ENV = "HASNA_COMPUTER_STORAGE_MODE";
15366
+ var COMPUTER_STORAGE_MODE_FALLBACK_ENV = "COMPUTER_STORAGE_MODE";
15367
+ var STORAGE_DATABASE_ENV = [COMPUTER_STORAGE_ENV, COMPUTER_STORAGE_FALLBACK_ENV];
15368
+ var STORAGE_MODE_ENV = [COMPUTER_STORAGE_MODE_ENV, COMPUTER_STORAGE_MODE_FALLBACK_ENV];
15362
15369
  var PRIMARY_KEYS = {
15363
15370
  sessions: ["id"],
15364
15371
  action_logs: ["id"],
15365
15372
  feedback: ["id"]
15366
15373
  };
15367
- function getCloudDatabaseUrl() {
15368
- return process.env["HASNA_COMPUTER_CLOUD_DATABASE_URL"] ?? process.env["OPEN_COMPUTER_CLOUD_DATABASE_URL"] ?? process.env["COMPUTER_CLOUD_DATABASE_URL"] ?? null;
15374
+ function readEnv3(name) {
15375
+ const value = process.env[name]?.trim();
15376
+ return value || undefined;
15377
+ }
15378
+ function normalizeStorageMode(value) {
15379
+ const normalized = value?.trim().toLowerCase();
15380
+ if (normalized === "local" || normalized === "hybrid" || normalized === "remote")
15381
+ return normalized;
15382
+ return;
15383
+ }
15384
+ function getStorageDatabaseEnvName() {
15385
+ for (const name of STORAGE_DATABASE_ENV) {
15386
+ if (readEnv3(name))
15387
+ return name;
15388
+ }
15389
+ return null;
15390
+ }
15391
+ function getStorageDatabaseEnv() {
15392
+ const name = getStorageDatabaseEnvName();
15393
+ return name ? { name } : null;
15369
15394
  }
15370
- async function getCloudPg() {
15371
- const url = getCloudDatabaseUrl();
15395
+ function getStorageDatabaseUrl() {
15396
+ const env = getStorageDatabaseEnv();
15397
+ return env ? readEnv3(env.name) ?? null : null;
15398
+ }
15399
+ function getStorageMode() {
15400
+ const mode = normalizeStorageMode(readEnv3(COMPUTER_STORAGE_MODE_ENV) ?? readEnv3(COMPUTER_STORAGE_MODE_FALLBACK_ENV));
15401
+ if (mode)
15402
+ return mode;
15403
+ return getStorageDatabaseUrl() ? "hybrid" : "local";
15404
+ }
15405
+ async function getStoragePg() {
15406
+ const url = getStorageDatabaseUrl();
15372
15407
  if (!url) {
15373
- throw new Error("Missing HASNA_COMPUTER_CLOUD_DATABASE_URL, OPEN_COMPUTER_CLOUD_DATABASE_URL, or COMPUTER_CLOUD_DATABASE_URL");
15408
+ throw new Error("Missing HASNA_COMPUTER_DATABASE_URL");
15374
15409
  }
15375
15410
  return new PgAdapterAsync(url);
15376
15411
  }
15377
- async function runCloudMigrations(remote) {
15412
+ async function runStorageMigrations(remote) {
15378
15413
  for (const sql of PG_MIGRATIONS)
15379
15414
  await remote.run(sql);
15380
15415
  }
15381
- async function cloudPush(options) {
15382
- const remote = await getCloudPg();
15416
+ async function storagePush(options) {
15417
+ const remote = await getStoragePg();
15383
15418
  const db2 = getDb();
15384
15419
  try {
15385
- await runCloudMigrations(remote);
15420
+ await runStorageMigrations(remote);
15386
15421
  const results = [];
15387
15422
  for (const table of resolveTables(options?.tables))
15388
15423
  results.push(await pushTable(db2, remote, table));
@@ -15392,11 +15427,11 @@ async function cloudPush(options) {
15392
15427
  await remote.close();
15393
15428
  }
15394
15429
  }
15395
- async function cloudPull(options) {
15396
- const remote = await getCloudPg();
15430
+ async function storagePull(options) {
15431
+ const remote = await getStoragePg();
15397
15432
  const db2 = getDb();
15398
15433
  try {
15399
- await runCloudMigrations(remote);
15434
+ await runStorageMigrations(remote);
15400
15435
  const results = [];
15401
15436
  for (const table of resolveTables(options?.tables))
15402
15437
  results.push(await pullTable(remote, db2, table));
@@ -15406,9 +15441,9 @@ async function cloudPull(options) {
15406
15441
  await remote.close();
15407
15442
  }
15408
15443
  }
15409
- async function cloudSync(options) {
15410
- const pull = await cloudPull(options);
15411
- const push2 = await cloudPush(options);
15444
+ async function storageSync(options) {
15445
+ const pull = await storagePull(options);
15446
+ const push2 = await storagePush(options);
15412
15447
  return { pull, push: push2 };
15413
15448
  }
15414
15449
  function getSyncMetaAll() {
@@ -15416,10 +15451,22 @@ function getSyncMetaAll() {
15416
15451
  ensureSyncMetaTable(db2);
15417
15452
  return db2.prepare("SELECT table_name, last_synced_at, direction FROM _computer_sync_meta ORDER BY table_name, direction").all();
15418
15453
  }
15454
+ function getStorageStatus() {
15455
+ const activeEnv = getStorageDatabaseEnv();
15456
+ return {
15457
+ configured: Boolean(activeEnv),
15458
+ mode: getStorageMode(),
15459
+ env: STORAGE_DATABASE_ENV,
15460
+ activeEnv: activeEnv?.name ?? null,
15461
+ service: "computer",
15462
+ tables: STORAGE_TABLES,
15463
+ sync: getSyncMetaAll()
15464
+ };
15465
+ }
15419
15466
  function resolveTables(tables) {
15420
15467
  if (!tables || tables.length === 0)
15421
- return [...CLOUD_TABLES];
15422
- const allowed = new Set(CLOUD_TABLES);
15468
+ return [...STORAGE_TABLES];
15469
+ const allowed = new Set(STORAGE_TABLES);
15423
15470
  const requested = tables.map((table) => table.trim()).filter(Boolean);
15424
15471
  const invalid = requested.filter((table) => !allowed.has(table));
15425
15472
  if (invalid.length > 0)
@@ -15548,6 +15595,9 @@ export {
15548
15595
  updateSession,
15549
15596
  supportsInlineImages,
15550
15597
  summarizeAccessibilityTree,
15598
+ storageSync,
15599
+ storagePush,
15600
+ storagePull,
15551
15601
  stepCost,
15552
15602
  setFocus,
15553
15603
  setConfigValue,
@@ -15559,8 +15609,8 @@ export {
15559
15609
  saveScreenshotToFile,
15560
15610
  saveConfig,
15561
15611
  runTask,
15612
+ runStorageMigrations,
15562
15613
  runPostSessionIntegrations,
15563
- runCloudMigrations,
15564
15614
  resolveTables,
15565
15615
  resetRateLimiter,
15566
15616
  renderInlineImage,
@@ -15578,6 +15628,12 @@ export {
15578
15628
  heartbeat,
15579
15629
  hasDisplay,
15580
15630
  getSyncMetaAll,
15631
+ getStorageStatus,
15632
+ getStoragePg,
15633
+ getStorageMode,
15634
+ getStorageDatabaseUrl,
15635
+ getStorageDatabaseEnvName,
15636
+ getStorageDatabaseEnv,
15581
15637
  getStats,
15582
15638
  getSession,
15583
15639
  getScreenSize,
@@ -15588,8 +15644,6 @@ export {
15588
15644
  getDataDir,
15589
15645
  getConfigValue,
15590
15646
  getConfigPath,
15591
- getCloudPg,
15592
- getCloudDatabaseUrl,
15593
15647
  getAgent,
15594
15648
  getActionLogs,
15595
15649
  formatCost,
@@ -15603,15 +15657,19 @@ export {
15603
15657
  createAnthropicProvider,
15604
15658
  computeScreenHash,
15605
15659
  compareHashes,
15606
- cloudSync,
15607
- cloudPush,
15608
- cloudPull,
15609
15660
  checkAction,
15610
15661
  captureScreenshot,
15611
15662
  calculateCost,
15663
+ STORAGE_TABLES,
15664
+ STORAGE_MODE_ENV,
15665
+ STORAGE_DATABASE_ENV,
15612
15666
  RECOMMENDED_WIDTHS,
15613
15667
  PgAdapterAsync,
15614
15668
  MacDriver,
15615
15669
  DEFAULT_CONFIG,
15616
- CLOUD_TABLES
15670
+ COMPUTER_STORAGE_TABLES,
15671
+ COMPUTER_STORAGE_MODE_FALLBACK_ENV,
15672
+ COMPUTER_STORAGE_MODE_ENV,
15673
+ COMPUTER_STORAGE_FALLBACK_ENV,
15674
+ COMPUTER_STORAGE_ENV
15617
15675
  };
@@ -0,0 +1,16 @@
1
+ export declare const MCP_HTTP_PORT = 8883;
2
+ export declare const MCP_NAME = "computer";
3
+ export declare function isHttpMode(argv: string[]): boolean;
4
+ export declare function isStdioMode(argv: string[]): boolean;
5
+ export declare function resolveHttpPort(argv: string[]): number;
6
+ export declare function healthPayload(): {
7
+ status: string;
8
+ name: string;
9
+ };
10
+ /** Handle /health and /mcp; return null if the request is unrelated. */
11
+ export declare function handleMcpHttpRequest(req: Request): Promise<Response | null>;
12
+ export declare function startMcpHttpServer(port: number): Promise<{
13
+ port: number;
14
+ stop: () => void;
15
+ }>;
16
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/mcp/http.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAElD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBtD;AAED,wBAAgB,aAAa,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAEhE;AAYD,wEAAwE;AACxE,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CASjF;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAW7C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.test.d.ts","sourceRoot":"","sources":["../../src/mcp/http.test.ts"],"names":[],"mappings":""}
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
- export {};
2
+ export { buildServer } from "./server.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AA4BA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}