@hasna/computer 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +4 -2
- package/README.md +73 -7
- package/dist/apps/ghostty/applescript.d.ts +36 -0
- package/dist/apps/ghostty/applescript.d.ts.map +1 -0
- package/dist/apps/ghostty/applescript.test.d.ts +2 -0
- package/dist/apps/ghostty/applescript.test.d.ts.map +1 -0
- package/dist/apps/ghostty/driver.d.ts +10 -0
- package/dist/apps/ghostty/driver.d.ts.map +1 -0
- package/dist/apps/registry.d.ts +5 -0
- package/dist/apps/registry.d.ts.map +1 -0
- package/dist/apps/registry.test.d.ts +2 -0
- package/dist/apps/registry.test.d.ts.map +1 -0
- package/dist/apps/types.d.ts +47 -0
- package/dist/apps/types.d.ts.map +1 -0
- package/dist/cli/index.js +1056 -92
- package/dist/cli/storage.d.ts +3 -0
- package/dist/cli/storage.d.ts.map +1 -0
- package/dist/cli/storage.test.d.ts +2 -0
- package/dist/cli/storage.test.d.ts.map +1 -0
- package/dist/db/storage-sync.d.ts +57 -0
- package/dist/db/storage-sync.d.ts.map +1 -0
- package/dist/db/storage-sync.test.d.ts +2 -0
- package/dist/db/storage-sync.test.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -26
- package/dist/mcp/http.d.ts +16 -0
- package/dist/mcp/http.d.ts.map +1 -0
- package/dist/mcp/http.test.d.ts +2 -0
- package/dist/mcp/http.test.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +609 -262
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/server/index.js +34566 -8748
- package/dist/storage.d.ts +5 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +5519 -0
- package/package.json +7 -2
- package/dist/cli/cloud.d.ts +0 -3
- package/dist/cli/cloud.d.ts.map +0 -1
- package/dist/db/cloud-sync.d.ts +0 -33
- package/dist/db/cloud-sync.d.ts.map +0 -1
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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/
|
|
30
|
+
export * from "./db/storage-sync.js";
|
|
31
31
|
export * from "./db/remote-storage.js";
|
|
32
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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/
|
|
15361
|
-
var
|
|
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
|
|
15368
|
-
|
|
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
|
-
|
|
15371
|
-
const
|
|
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
|
|
15408
|
+
throw new Error("Missing HASNA_COMPUTER_DATABASE_URL");
|
|
15374
15409
|
}
|
|
15375
15410
|
return new PgAdapterAsync(url);
|
|
15376
15411
|
}
|
|
15377
|
-
async function
|
|
15412
|
+
async function runStorageMigrations(remote) {
|
|
15378
15413
|
for (const sql of PG_MIGRATIONS)
|
|
15379
15414
|
await remote.run(sql);
|
|
15380
15415
|
}
|
|
15381
|
-
async function
|
|
15382
|
-
const remote = await
|
|
15416
|
+
async function storagePush(options) {
|
|
15417
|
+
const remote = await getStoragePg();
|
|
15383
15418
|
const db2 = getDb();
|
|
15384
15419
|
try {
|
|
15385
|
-
await
|
|
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
|
|
15396
|
-
const remote = await
|
|
15430
|
+
async function storagePull(options) {
|
|
15431
|
+
const remote = await getStoragePg();
|
|
15397
15432
|
const db2 = getDb();
|
|
15398
15433
|
try {
|
|
15399
|
-
await
|
|
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
|
|
15410
|
-
const pull = await
|
|
15411
|
-
const push2 = await
|
|
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 [...
|
|
15422
|
-
const allowed = new Set(
|
|
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
|
-
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"http.test.d.ts","sourceRoot":"","sources":["../../src/mcp/http.test.ts"],"names":[],"mappings":""}
|
package/dist/mcp/index.d.ts
CHANGED
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -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"}
|