@opendatalabs/connect 0.8.1-canary.ff55fb0 → 0.9.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.
- package/README.md +35 -33
- package/dist/cli/bin.js +8 -0
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/index.d.ts +87 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3582 -305
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +8 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/mcp-server.d.ts +15 -0
- package/dist/cli/mcp-server.d.ts.map +1 -0
- package/dist/cli/mcp-server.js +199 -0
- package/dist/cli/mcp-server.js.map +1 -0
- package/dist/cli/queries.d.ts +128 -0
- package/dist/cli/queries.d.ts.map +1 -0
- package/dist/cli/queries.js +415 -0
- package/dist/cli/queries.js.map +1 -0
- package/dist/cli/render/capabilities.d.ts +9 -0
- package/dist/cli/render/capabilities.d.ts.map +1 -0
- package/dist/cli/render/capabilities.js +24 -0
- package/dist/cli/render/capabilities.js.map +1 -0
- package/dist/cli/render/connect-renderer.d.ts +18 -0
- package/dist/cli/render/connect-renderer.d.ts.map +1 -0
- package/dist/cli/render/connect-renderer.js +255 -0
- package/dist/cli/render/connect-renderer.js.map +1 -0
- package/dist/cli/render/format.d.ts +27 -0
- package/dist/cli/render/format.d.ts.map +1 -0
- package/dist/cli/render/format.js +111 -0
- package/dist/cli/render/format.js.map +1 -0
- package/dist/cli/render/index.d.ts +7 -0
- package/dist/cli/render/index.d.ts.map +1 -0
- package/dist/cli/render/index.js +7 -0
- package/dist/cli/render/index.js.map +1 -0
- package/dist/cli/render/progress.d.ts +11 -0
- package/dist/cli/render/progress.d.ts.map +1 -0
- package/dist/cli/render/progress.js +56 -0
- package/dist/cli/render/progress.js.map +1 -0
- package/dist/cli/render/symbols.d.ts +11 -0
- package/dist/cli/render/symbols.d.ts.map +1 -0
- package/dist/cli/render/symbols.js +21 -0
- package/dist/cli/render/symbols.js.map +1 -0
- package/dist/cli/render/theme.d.ts +15 -0
- package/dist/cli/render/theme.d.ts.map +1 -0
- package/dist/cli/render/theme.js +41 -0
- package/dist/cli/render/theme.js.map +1 -0
- package/dist/cli/search-select.d.ts +17 -0
- package/dist/cli/search-select.d.ts.map +1 -0
- package/dist/cli/search-select.js +29 -0
- package/dist/cli/search-select.js.map +1 -0
- package/dist/cli/update-check-worker.d.ts +2 -0
- package/dist/cli/update-check-worker.d.ts.map +1 -0
- package/dist/cli/update-check-worker.js +55 -0
- package/dist/cli/update-check-worker.js.map +1 -0
- package/dist/cli/update-check.d.ts +21 -0
- package/dist/cli/update-check.d.ts.map +1 -0
- package/dist/cli/update-check.js +52 -0
- package/dist/cli/update-check.js.map +1 -0
- package/dist/connectors/registry.d.ts +27 -1
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +168 -4
- package/dist/connectors/registry.js.map +1 -1
- package/dist/core/cli-types.d.ts +583 -1
- package/dist/core/cli-types.d.ts.map +1 -1
- package/dist/core/cli-types.js +262 -1
- package/dist/core/cli-types.js.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/paths.d.ts +22 -3
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +71 -10
- package/dist/core/paths.js.map +1 -1
- package/dist/core/state-store.d.ts +23 -0
- package/dist/core/state-store.d.ts.map +1 -1
- package/dist/core/state-store.js +83 -5
- package/dist/core/state-store.js.map +1 -1
- package/dist/personal-server/client.d.ts +34 -0
- package/dist/personal-server/client.d.ts.map +1 -0
- package/dist/personal-server/client.js +94 -0
- package/dist/personal-server/client.js.map +1 -0
- package/dist/personal-server/index.d.ts +10 -0
- package/dist/personal-server/index.d.ts.map +1 -1
- package/dist/personal-server/index.js +79 -32
- package/dist/personal-server/index.js.map +1 -1
- package/dist/personal-server/scope-resolver.d.ts +22 -0
- package/dist/personal-server/scope-resolver.d.ts.map +1 -0
- package/dist/personal-server/scope-resolver.js +68 -0
- package/dist/personal-server/scope-resolver.js.map +1 -0
- package/dist/runtime/core/contracts.d.ts +84 -0
- package/dist/runtime/core/contracts.d.ts.map +1 -0
- package/dist/runtime/core/contracts.js +2 -0
- package/dist/runtime/core/contracts.js.map +1 -0
- package/dist/runtime/core/index.d.ts +2 -0
- package/dist/runtime/core/index.d.ts.map +1 -0
- package/dist/runtime/core/index.js +2 -0
- package/dist/runtime/core/index.js.map +1 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/managed-playwright.d.ts +12 -3
- package/dist/runtime/managed-playwright.d.ts.map +1 -1
- package/dist/runtime/managed-playwright.js +124 -187
- package/dist/runtime/managed-playwright.js.map +1 -1
- package/dist/runtime/playwright/browser.d.ts +12 -0
- package/dist/runtime/playwright/browser.d.ts.map +1 -0
- package/dist/runtime/playwright/browser.js +229 -0
- package/dist/runtime/playwright/browser.js.map +1 -0
- package/dist/runtime/playwright/in-process-run.d.ts +6 -0
- package/dist/runtime/playwright/in-process-run.d.ts.map +1 -0
- package/dist/runtime/playwright/in-process-run.js +628 -0
- package/dist/runtime/playwright/in-process-run.js.map +1 -0
- package/dist/runtime/playwright/index.d.ts +3 -0
- package/dist/runtime/playwright/index.d.ts.map +1 -0
- package/dist/runtime/playwright/index.js +3 -0
- package/dist/runtime/playwright/index.js.map +1 -0
- package/dist/runtime/repo-paths.d.ts.map +1 -1
- package/dist/runtime/repo-paths.js +24 -7
- package/dist/runtime/repo-paths.js.map +1 -1
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +3 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/paths.d.ts +33 -0
- package/dist/skills/paths.d.ts.map +1 -0
- package/dist/skills/paths.js +81 -0
- package/dist/skills/paths.js.map +1 -0
- package/dist/skills/registry.d.ts +48 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +173 -0
- package/dist/skills/registry.js.map +1 -0
- package/package.json +34 -9
- package/runtime-assets/playwright-runner/entitlements.plist +0 -12
- package/runtime-assets/playwright-runner/index.cjs +0 -1011
- package/runtime-assets/playwright-runner/package-lock.json +0 -1242
- package/runtime-assets/playwright-runner/package.json +0 -29
- package/runtime-assets/playwright-runner/scripts/build.js +0 -182
- package/runtime-assets/run-connector.cjs +0 -275
package/dist/core/state-store.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import
|
|
3
|
+
import crypto from "node:crypto";
|
|
4
|
+
import { getCliStatePath, getVanaHome } from "./paths.js";
|
|
5
|
+
const STATE_LOCK_TIMEOUT_MS = 5_000;
|
|
6
|
+
const STATE_LOCK_RETRY_MS = 25;
|
|
7
|
+
const STATE_LOCK_STALE_MS = 30_000;
|
|
8
|
+
let testHooks;
|
|
4
9
|
export async function readCliState() {
|
|
5
10
|
try {
|
|
6
11
|
const raw = await fs.readFile(getCliStatePath(), "utf8");
|
|
@@ -11,13 +16,86 @@ export async function readCliState() {
|
|
|
11
16
|
}
|
|
12
17
|
}
|
|
13
18
|
export async function updateSourceState(source, patch) {
|
|
19
|
+
await fs.mkdir(getVanaHome(), { recursive: true });
|
|
20
|
+
await withStateFileLock(async () => {
|
|
21
|
+
await testHooks?.beforeRead?.();
|
|
22
|
+
const state = await readCliState();
|
|
23
|
+
const current = state.sources[source] ?? {};
|
|
24
|
+
state.sources[source] = { ...current, ...patch };
|
|
25
|
+
await testHooks?.beforeWrite?.();
|
|
26
|
+
await atomicWriteFile(getCliStatePath(), `${JSON.stringify(state, null, 2)}\n`);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export async function readCliConfig() {
|
|
14
30
|
const state = await readCliState();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
await fs.
|
|
31
|
+
return state.config ?? {};
|
|
32
|
+
}
|
|
33
|
+
export async function updateCliConfig(patch) {
|
|
34
|
+
await fs.mkdir(getVanaHome(), { recursive: true });
|
|
35
|
+
await withStateFileLock(async () => {
|
|
36
|
+
await testHooks?.beforeRead?.();
|
|
37
|
+
const state = await readCliState();
|
|
38
|
+
state.config = { ...(state.config ?? {}), ...patch };
|
|
39
|
+
await testHooks?.beforeWrite?.();
|
|
40
|
+
await atomicWriteFile(getCliStatePath(), `${JSON.stringify(state, null, 2)}\n`);
|
|
41
|
+
});
|
|
19
42
|
}
|
|
20
43
|
export async function ensureParentDir(filePath) {
|
|
21
44
|
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
22
45
|
}
|
|
46
|
+
export function __setStateStoreTestHooks(hooks) {
|
|
47
|
+
testHooks = hooks;
|
|
48
|
+
}
|
|
49
|
+
async function withStateFileLock(fn) {
|
|
50
|
+
const lockPath = `${getCliStatePath()}.lock`;
|
|
51
|
+
const start = Date.now();
|
|
52
|
+
while (true) {
|
|
53
|
+
try {
|
|
54
|
+
const handle = await fs.open(lockPath, "wx");
|
|
55
|
+
try {
|
|
56
|
+
return await fn();
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
await handle.close();
|
|
60
|
+
await fs.rm(lockPath, { force: true });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (!isLockAlreadyHeld(error)) {
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
if (await isStaleLock(lockPath)) {
|
|
68
|
+
await fs.rm(lockPath, { force: true });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (Date.now() - start >= STATE_LOCK_TIMEOUT_MS) {
|
|
72
|
+
throw new Error("Timed out waiting for the Vana Connect state file lock.");
|
|
73
|
+
}
|
|
74
|
+
await sleep(STATE_LOCK_RETRY_MS);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function atomicWriteFile(filePath, contents) {
|
|
79
|
+
const tempPath = `${filePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
|
|
80
|
+
await fs.writeFile(tempPath, contents, "utf8");
|
|
81
|
+
await fs.rename(tempPath, filePath);
|
|
82
|
+
}
|
|
83
|
+
async function isStaleLock(lockPath) {
|
|
84
|
+
try {
|
|
85
|
+
const stats = await fs.stat(lockPath);
|
|
86
|
+
return Date.now() - stats.mtimeMs > STATE_LOCK_STALE_MS;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function isLockAlreadyHeld(error) {
|
|
93
|
+
return (typeof error === "object" &&
|
|
94
|
+
error !== null &&
|
|
95
|
+
"code" in error &&
|
|
96
|
+
error.code === "EEXIST");
|
|
97
|
+
}
|
|
98
|
+
function sleep(ms) {
|
|
99
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
100
|
+
}
|
|
23
101
|
//# sourceMappingURL=state-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../src/core/state-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../src/core/state-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { PersonalServerHealth } from "./index.js";
|
|
2
|
+
export interface IngestScopeResult {
|
|
3
|
+
scope: string;
|
|
4
|
+
status: "stored" | "failed";
|
|
5
|
+
collectedAt?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ScopeSummary {
|
|
9
|
+
scope: string;
|
|
10
|
+
count: number;
|
|
11
|
+
}
|
|
12
|
+
export interface PersonalServerClient {
|
|
13
|
+
health(): Promise<PersonalServerHealth>;
|
|
14
|
+
ingestScope(scope: string, data: unknown): Promise<IngestScopeResult>;
|
|
15
|
+
listScopes(prefix?: string): Promise<ScopeSummary[]>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create an HTTP client for a Vana personal server.
|
|
19
|
+
*
|
|
20
|
+
* @param config - Connection configuration
|
|
21
|
+
* @param config.url - Base URL of the personal server
|
|
22
|
+
* @param config.auth - Optional authentication configuration
|
|
23
|
+
* @returns A PersonalServerClient instance
|
|
24
|
+
*/
|
|
25
|
+
export declare function createPersonalServerClient(config: {
|
|
26
|
+
url: string;
|
|
27
|
+
auth?: {
|
|
28
|
+
type: "devToken";
|
|
29
|
+
token: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: "none";
|
|
32
|
+
};
|
|
33
|
+
}): PersonalServerClient;
|
|
34
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/personal-server/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtE,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACtD;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,GAAG,oBAAoB,CAoGvB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create an HTTP client for a Vana personal server.
|
|
3
|
+
*
|
|
4
|
+
* @param config - Connection configuration
|
|
5
|
+
* @param config.url - Base URL of the personal server
|
|
6
|
+
* @param config.auth - Optional authentication configuration
|
|
7
|
+
* @returns A PersonalServerClient instance
|
|
8
|
+
*/
|
|
9
|
+
export function createPersonalServerClient(config) {
|
|
10
|
+
const baseUrl = config.url.replace(/\/+$/, "");
|
|
11
|
+
function authHeaders() {
|
|
12
|
+
if (config.auth?.type === "devToken") {
|
|
13
|
+
return { Authorization: `Bearer ${config.auth.token}` };
|
|
14
|
+
}
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
async health() {
|
|
19
|
+
const response = await fetch(`${baseUrl}/health`, {
|
|
20
|
+
method: "GET",
|
|
21
|
+
signal: AbortSignal.timeout(2_000),
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
throw new Error(`Health check failed: ${response.status}`);
|
|
25
|
+
}
|
|
26
|
+
const body = (await response.json());
|
|
27
|
+
return {
|
|
28
|
+
status: typeof body.status === "string" ? body.status : "unknown",
|
|
29
|
+
version: typeof body.version === "string" ? body.version : "unknown",
|
|
30
|
+
uptime: typeof body.uptime === "number" ? body.uptime : 0,
|
|
31
|
+
owner: typeof body.owner === "string" ? body.owner : null,
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
async ingestScope(scope, data) {
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(`${baseUrl}/v1/data/${scope}`, {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers: {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
...authHeaders(),
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify(data),
|
|
43
|
+
});
|
|
44
|
+
if (response.status === 201 || (response.ok && response.status < 300)) {
|
|
45
|
+
const body = (await response.json().catch(() => ({})));
|
|
46
|
+
return {
|
|
47
|
+
scope,
|
|
48
|
+
status: "stored",
|
|
49
|
+
collectedAt: typeof body.collectedAt === "string"
|
|
50
|
+
? body.collectedAt
|
|
51
|
+
: new Date().toISOString(),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const errorText = await response.text().catch(() => "Unknown error");
|
|
55
|
+
return {
|
|
56
|
+
scope,
|
|
57
|
+
status: "failed",
|
|
58
|
+
error: `HTTP ${response.status}: ${errorText}`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return {
|
|
63
|
+
scope,
|
|
64
|
+
status: "failed",
|
|
65
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
async listScopes(prefix) {
|
|
70
|
+
// This endpoint requires auth — if no auth configured, return empty.
|
|
71
|
+
if (!config.auth || config.auth.type === "none") {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const params = prefix
|
|
76
|
+
? `?scopePrefix=${encodeURIComponent(prefix)}`
|
|
77
|
+
: "";
|
|
78
|
+
const response = await fetch(`${baseUrl}/v1/data${params}`, {
|
|
79
|
+
method: "GET",
|
|
80
|
+
headers: authHeaders(),
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
const body = (await response.json());
|
|
86
|
+
return body.scopes ?? [];
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/personal-server/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import type { CliEvent, PersonalServerState } from "../core/cli-types.js";
|
|
2
|
+
export { createPersonalServerClient } from "./client.js";
|
|
3
|
+
export type { PersonalServerClient, IngestScopeResult, ScopeSummary, } from "./client.js";
|
|
4
|
+
export interface PersonalServerHealth {
|
|
5
|
+
status: string;
|
|
6
|
+
version: string;
|
|
7
|
+
uptime: number;
|
|
8
|
+
owner: string | null;
|
|
9
|
+
}
|
|
2
10
|
export interface PersonalServerTarget {
|
|
3
11
|
state: PersonalServerState;
|
|
4
12
|
url: string | null;
|
|
13
|
+
source: "config" | "env" | "scan" | null;
|
|
14
|
+
health: PersonalServerHealth | null;
|
|
5
15
|
}
|
|
6
16
|
export declare function detectPersonalServerTarget(): Promise<PersonalServerTarget>;
|
|
7
17
|
export declare function ingestResult(source: string, resultPath: string, target: PersonalServerTarget): Promise<CliEvent[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAO1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IACzC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACrC;AAED,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAmChF;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoErB"}
|
|
@@ -1,19 +1,43 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
|
+
import { readCliConfig } from "../core/state-store.js";
|
|
3
|
+
import { resolveScopes } from "./scope-resolver.js";
|
|
4
|
+
import { createPersonalServerClient } from "./client.js";
|
|
5
|
+
import { readCachedConnectorMetadata } from "../connectors/registry.js";
|
|
6
|
+
import { getConnectorCacheDir } from "../core/paths.js";
|
|
7
|
+
export { createPersonalServerClient } from "./client.js";
|
|
2
8
|
const DEFAULT_PORTS = [8080, 8081, 8082, 8083, 8084, 8085];
|
|
3
9
|
export async function detectPersonalServerTarget() {
|
|
10
|
+
// 1. Persisted config (highest priority)
|
|
11
|
+
const config = await readCliConfig();
|
|
12
|
+
if (config.personalServerUrl) {
|
|
13
|
+
const health = await fetchHealth(config.personalServerUrl);
|
|
14
|
+
return {
|
|
15
|
+
state: health ? "available" : "unavailable",
|
|
16
|
+
url: config.personalServerUrl,
|
|
17
|
+
source: "config",
|
|
18
|
+
health,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// 2. Environment variable
|
|
4
22
|
const explicitUrl = process.env.VANA_PERSONAL_SERVER_URL;
|
|
5
23
|
if (explicitUrl) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
:
|
|
24
|
+
const health = await fetchHealth(explicitUrl);
|
|
25
|
+
return {
|
|
26
|
+
state: health ? "available" : "unavailable",
|
|
27
|
+
url: explicitUrl,
|
|
28
|
+
source: "env",
|
|
29
|
+
health,
|
|
30
|
+
};
|
|
9
31
|
}
|
|
32
|
+
// 3. Localhost port scan
|
|
10
33
|
for (const port of DEFAULT_PORTS) {
|
|
11
34
|
const url = `http://localhost:${port}`;
|
|
12
|
-
|
|
13
|
-
|
|
35
|
+
const health = await fetchHealth(url);
|
|
36
|
+
if (health) {
|
|
37
|
+
return { state: "available", url, source: "scan", health };
|
|
14
38
|
}
|
|
15
39
|
}
|
|
16
|
-
return { state: "unavailable", url: null };
|
|
40
|
+
return { state: "unavailable", url: null, source: null, health: null };
|
|
17
41
|
}
|
|
18
42
|
export async function ingestResult(source, resultPath, target) {
|
|
19
43
|
if (target.state !== "available" || !target.url) {
|
|
@@ -27,50 +51,73 @@ export async function ingestResult(source, resultPath, target) {
|
|
|
27
51
|
}
|
|
28
52
|
const raw = await fs.readFile(resultPath, "utf8");
|
|
29
53
|
const result = JSON.parse(raw);
|
|
30
|
-
const
|
|
31
|
-
|
|
54
|
+
const metadata = await readCachedConnectorMetadata(source, getConnectorCacheDir());
|
|
55
|
+
const scopeMappings = resolveScopes(source, result, metadata);
|
|
56
|
+
if (scopeMappings.length === 0) {
|
|
57
|
+
return [
|
|
58
|
+
{
|
|
59
|
+
type: "ingest-skipped",
|
|
60
|
+
source,
|
|
61
|
+
reason: "no_scopes_resolved",
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
const client = createPersonalServerClient({ url: target.url });
|
|
32
66
|
const events = [
|
|
33
|
-
{
|
|
34
|
-
type: "ingest-started",
|
|
35
|
-
source,
|
|
36
|
-
target: target.url,
|
|
37
|
-
},
|
|
67
|
+
{ type: "ingest-started", source, target: target.url },
|
|
38
68
|
];
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
throw new Error(`Ingest failed for ${scope}: ${response.status}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
69
|
+
const scopeResults = [];
|
|
70
|
+
for (const mapping of scopeMappings) {
|
|
71
|
+
const scopeResult = await client.ingestScope(mapping.scope, mapping.data);
|
|
72
|
+
scopeResults.push(scopeResult);
|
|
73
|
+
}
|
|
74
|
+
const allStored = scopeResults.every((r) => r.status === "stored");
|
|
75
|
+
const allFailed = scopeResults.every((r) => r.status === "failed");
|
|
76
|
+
if (allStored) {
|
|
50
77
|
events.push({
|
|
51
78
|
type: "ingest-complete",
|
|
52
79
|
source,
|
|
53
80
|
target: target.url,
|
|
81
|
+
scopeResults,
|
|
54
82
|
});
|
|
55
|
-
return events;
|
|
56
83
|
}
|
|
57
|
-
|
|
84
|
+
else if (allFailed) {
|
|
58
85
|
events.push({
|
|
59
86
|
type: "ingest-failed",
|
|
60
87
|
source,
|
|
61
88
|
target: target.url,
|
|
62
|
-
message:
|
|
89
|
+
message: scopeResults.map((r) => `${r.scope}: ${r.error}`).join("; "),
|
|
90
|
+
scopeResults,
|
|
63
91
|
});
|
|
64
|
-
return events;
|
|
65
92
|
}
|
|
93
|
+
else {
|
|
94
|
+
events.push({
|
|
95
|
+
type: "ingest-partial",
|
|
96
|
+
source,
|
|
97
|
+
target: target.url,
|
|
98
|
+
scopeResults,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return events;
|
|
66
102
|
}
|
|
67
|
-
async function
|
|
103
|
+
async function fetchHealth(baseUrl) {
|
|
68
104
|
try {
|
|
69
|
-
const response = await fetch(`${baseUrl}/health`, {
|
|
70
|
-
|
|
105
|
+
const response = await fetch(`${baseUrl}/health`, {
|
|
106
|
+
method: "GET",
|
|
107
|
+
signal: AbortSignal.timeout(2_000),
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok)
|
|
110
|
+
return null;
|
|
111
|
+
const body = (await response.json());
|
|
112
|
+
return {
|
|
113
|
+
status: typeof body.status === "string" ? body.status : "unknown",
|
|
114
|
+
version: typeof body.version === "string" ? body.version : "unknown",
|
|
115
|
+
uptime: typeof body.uptime === "number" ? body.uptime : 0,
|
|
116
|
+
owner: typeof body.owner === "string" ? body.owner : null,
|
|
117
|
+
};
|
|
71
118
|
}
|
|
72
119
|
catch {
|
|
73
|
-
return
|
|
120
|
+
return null;
|
|
74
121
|
}
|
|
75
122
|
}
|
|
76
123
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/personal-server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ConnectorMetadata } from "../connectors/registry.js";
|
|
2
|
+
export interface ScopeMapping {
|
|
3
|
+
scope: string;
|
|
4
|
+
data: unknown;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolve connector output keys to personal server scopes.
|
|
8
|
+
*
|
|
9
|
+
* Strategy (matches DataConnect production):
|
|
10
|
+
* 1. If any output keys contain ".", use them directly as scopes
|
|
11
|
+
* 2. Otherwise, use connector metadata to map: metadata scope "github.profile"
|
|
12
|
+
* → look for key "profile" in result
|
|
13
|
+
* 3. If no metadata, fall back to "{source}.{key}" for every non-metadata key
|
|
14
|
+
* (exclude: exportSummary, timestamp, version, platform)
|
|
15
|
+
*
|
|
16
|
+
* @param source - The connector source name (e.g. "github")
|
|
17
|
+
* @param result - The connector output as key-value pairs
|
|
18
|
+
* @param metadata - Optional connector metadata with scope definitions
|
|
19
|
+
* @returns An array of scope mappings
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveScopes(source: string, result: Record<string, unknown>, metadata: ConnectorMetadata | null): ScopeMapping[];
|
|
22
|
+
//# sourceMappingURL=scope-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolver.d.ts","sourceRoot":"","sources":["../../src/personal-server/scope-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GACjC,YAAY,EAAE,CAmChB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** Keys that are connector metadata, not user data. */
|
|
2
|
+
const EXCLUDED_KEYS = new Set([
|
|
3
|
+
"exportSummary",
|
|
4
|
+
"timestamp",
|
|
5
|
+
"version",
|
|
6
|
+
"platform",
|
|
7
|
+
]);
|
|
8
|
+
/**
|
|
9
|
+
* Ensure scope data is a JSON object for the Personal Server API.
|
|
10
|
+
* Arrays are wrapped as `{ items: [...] }`. Primitives are wrapped
|
|
11
|
+
* as `{ value: ... }`. Objects pass through unchanged.
|
|
12
|
+
*/
|
|
13
|
+
function ensureObject(data) {
|
|
14
|
+
if (Array.isArray(data)) {
|
|
15
|
+
return { items: data };
|
|
16
|
+
}
|
|
17
|
+
if (data !== null && typeof data === "object") {
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
return { value: data };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolve connector output keys to personal server scopes.
|
|
24
|
+
*
|
|
25
|
+
* Strategy (matches DataConnect production):
|
|
26
|
+
* 1. If any output keys contain ".", use them directly as scopes
|
|
27
|
+
* 2. Otherwise, use connector metadata to map: metadata scope "github.profile"
|
|
28
|
+
* → look for key "profile" in result
|
|
29
|
+
* 3. If no metadata, fall back to "{source}.{key}" for every non-metadata key
|
|
30
|
+
* (exclude: exportSummary, timestamp, version, platform)
|
|
31
|
+
*
|
|
32
|
+
* @param source - The connector source name (e.g. "github")
|
|
33
|
+
* @param result - The connector output as key-value pairs
|
|
34
|
+
* @param metadata - Optional connector metadata with scope definitions
|
|
35
|
+
* @returns An array of scope mappings
|
|
36
|
+
*/
|
|
37
|
+
export function resolveScopes(source, result, metadata) {
|
|
38
|
+
const keys = Object.keys(result);
|
|
39
|
+
// Strategy 1: If any keys are already dotted scopes, use them directly.
|
|
40
|
+
const dottedKeys = keys.filter((key) => key.includes(".") && !EXCLUDED_KEYS.has(key));
|
|
41
|
+
if (dottedKeys.length > 0) {
|
|
42
|
+
return dottedKeys.map((key) => ({
|
|
43
|
+
scope: key,
|
|
44
|
+
data: ensureObject(result[key]),
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
// Strategy 2: Use metadata scopes to map flat keys.
|
|
48
|
+
if (metadata?.scopes && metadata.scopes.length > 0) {
|
|
49
|
+
const mappings = [];
|
|
50
|
+
for (const { scope } of metadata.scopes) {
|
|
51
|
+
// Extract the key portion after the dot, e.g. "github.profile" → "profile"
|
|
52
|
+
const dotIndex = scope.indexOf(".");
|
|
53
|
+
const key = dotIndex >= 0 ? scope.slice(dotIndex + 1) : scope;
|
|
54
|
+
if (key in result) {
|
|
55
|
+
mappings.push({ scope, data: ensureObject(result[key]) });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return mappings;
|
|
59
|
+
}
|
|
60
|
+
// Strategy 3: Fall back to "{source}.{key}" for every non-metadata key.
|
|
61
|
+
return keys
|
|
62
|
+
.filter((key) => !EXCLUDED_KEYS.has(key))
|
|
63
|
+
.map((key) => ({
|
|
64
|
+
scope: `${source}.${key}`,
|
|
65
|
+
data: ensureObject(result[key]),
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=scope-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolver.js","sourceRoot":"","sources":["../../src/personal-server/scope-resolver.ts"],"names":[],"mappings":"AAOA,uDAAuD;AACvD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,eAAe;IACf,WAAW;IACX,SAAS;IACT,UAAU;CACX,CAAC,CAAC;AAEH;;;;GAIG;AACH,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,IAA+B,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,MAA+B,EAC/B,QAAkC;IAElC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,wEAAwE;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CACtD,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAChC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,oDAAoD;IACpD,IAAI,QAAQ,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxC,2EAA2E;YAC3E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9D,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,KAAK,EAAE,GAAG,MAAM,IAAI,GAAG,EAAE;QACzB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAChC,CAAC,CAAC,CAAC;AACR,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export interface RuntimeNeedInputEvent {
|
|
2
|
+
type: "needs-input";
|
|
3
|
+
source: string;
|
|
4
|
+
message: string;
|
|
5
|
+
fields: string[];
|
|
6
|
+
logPath: string;
|
|
7
|
+
schema?: {
|
|
8
|
+
properties?: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
pendingInputPath?: string;
|
|
11
|
+
responseInputPath?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface RuntimeRunStartedEvent {
|
|
14
|
+
type: "run-started";
|
|
15
|
+
source: string;
|
|
16
|
+
logPath: string;
|
|
17
|
+
}
|
|
18
|
+
export interface RuntimeLegacyAuthEvent {
|
|
19
|
+
type: "legacy-auth";
|
|
20
|
+
source: string;
|
|
21
|
+
message: string;
|
|
22
|
+
logPath: string;
|
|
23
|
+
}
|
|
24
|
+
export interface RuntimeHeadedRequiredEvent {
|
|
25
|
+
type: "headed-required";
|
|
26
|
+
source: string;
|
|
27
|
+
message: string;
|
|
28
|
+
logPath: string;
|
|
29
|
+
url?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface RuntimeCollectionCompleteEvent {
|
|
32
|
+
type: "collection-complete";
|
|
33
|
+
source: string;
|
|
34
|
+
resultPath: string;
|
|
35
|
+
logPath: string;
|
|
36
|
+
}
|
|
37
|
+
export interface RuntimeProgressEvent {
|
|
38
|
+
type: "progress-update";
|
|
39
|
+
source: string;
|
|
40
|
+
logPath: string;
|
|
41
|
+
message?: string;
|
|
42
|
+
count?: number;
|
|
43
|
+
phase?: unknown;
|
|
44
|
+
}
|
|
45
|
+
export interface RuntimeStatusEvent {
|
|
46
|
+
type: "status-update";
|
|
47
|
+
source: string;
|
|
48
|
+
logPath: string;
|
|
49
|
+
message: string;
|
|
50
|
+
}
|
|
51
|
+
export interface RuntimeErrorEvent {
|
|
52
|
+
type: "runtime-error";
|
|
53
|
+
source: string;
|
|
54
|
+
message: string;
|
|
55
|
+
logPath: string;
|
|
56
|
+
}
|
|
57
|
+
export type RuntimeEvent = RuntimeRunStartedEvent | RuntimeNeedInputEvent | RuntimeHeadedRequiredEvent | RuntimeLegacyAuthEvent | RuntimeCollectionCompleteEvent | RuntimeProgressEvent | RuntimeStatusEvent | RuntimeErrorEvent;
|
|
58
|
+
export interface RuntimeInputRequest {
|
|
59
|
+
message?: string;
|
|
60
|
+
schema?: {
|
|
61
|
+
properties?: Record<string, unknown>;
|
|
62
|
+
};
|
|
63
|
+
fields: string[];
|
|
64
|
+
responseInputPath: string;
|
|
65
|
+
}
|
|
66
|
+
export interface ConnectorRunRequest {
|
|
67
|
+
connectorPath: string;
|
|
68
|
+
source: string;
|
|
69
|
+
noInput?: boolean;
|
|
70
|
+
signal?: AbortSignal;
|
|
71
|
+
onNeedInput?: (event: RuntimeInputRequest) => Promise<Record<string, string>>;
|
|
72
|
+
}
|
|
73
|
+
export interface ConnectorRunHandle {
|
|
74
|
+
readonly source: string;
|
|
75
|
+
readonly logPath: string;
|
|
76
|
+
events(): AsyncGenerator<RuntimeEvent, void, void>;
|
|
77
|
+
stop(reason?: string): void;
|
|
78
|
+
}
|
|
79
|
+
export interface RuntimeCapabilities {
|
|
80
|
+
supportsHeaded: boolean;
|
|
81
|
+
supportsManagedProfiles: boolean;
|
|
82
|
+
supportsScreenshots: boolean;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/runtime/core/contracts.ts"],"names":[],"mappings":"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"}
|