vana-cli 0.24.4 → 0.25.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/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +20 -1
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +98 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/registry.d.ts +2 -0
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +18 -2
- package/dist/connectors/registry.js.map +1 -1
- package/dist/core/cli-types.d.ts +44 -0
- package/dist/core/cli-types.d.ts.map +1 -1
- package/dist/core/cli-types.js +14 -0
- package/dist/core/cli-types.js.map +1 -1
- package/dist/core/state-store.d.ts +6 -0
- package/dist/core/state-store.d.ts.map +1 -1
- package/dist/core/state-store.js.map +1 -1
- package/dist/pdpp/host.d.ts +66 -0
- package/dist/pdpp/host.d.ts.map +1 -0
- package/dist/pdpp/host.js +283 -0
- package/dist/pdpp/host.js.map +1 -0
- package/dist/pdpp/installer.d.ts +17 -0
- package/dist/pdpp/installer.d.ts.map +1 -0
- package/dist/pdpp/installer.js +117 -0
- package/dist/pdpp/installer.js.map +1 -0
- package/dist/pdpp/local.d.ts +14 -0
- package/dist/pdpp/local.d.ts.map +1 -0
- package/dist/pdpp/local.js +76 -0
- package/dist/pdpp/local.js.map +1 -0
- package/dist/pdpp/pins.d.ts +23 -0
- package/dist/pdpp/pins.d.ts.map +1 -0
- package/dist/pdpp/pins.js +18 -0
- package/dist/pdpp/pins.js.map +1 -0
- package/dist/pdpp/profile.d.ts +49 -0
- package/dist/pdpp/profile.d.ts.map +1 -0
- package/dist/pdpp/profile.js +17 -0
- package/dist/pdpp/profile.js.map +1 -0
- package/dist/pdpp/protocol.d.ts +79 -0
- package/dist/pdpp/protocol.d.ts.map +1 -0
- package/dist/pdpp/protocol.js +372 -0
- package/dist/pdpp/protocol.js.map +1 -0
- package/dist/pdpp/runtime.d.ts +43 -0
- package/dist/pdpp/runtime.d.ts.map +1 -0
- package/dist/pdpp/runtime.js +387 -0
- package/dist/pdpp/runtime.js.map +1 -0
- package/dist/pdpp/store.d.ts +43 -0
- package/dist/pdpp/store.d.ts.map +1 -0
- package/dist/pdpp/store.js +100 -0
- package/dist/pdpp/store.js.map +1 -0
- package/dist/runtime/core/contracts.d.ts +2 -0
- package/dist/runtime/core/contracts.d.ts.map +1 -1
- package/dist/runtime/managed-playwright.d.ts +7 -0
- package/dist/runtime/managed-playwright.d.ts.map +1 -1
- package/dist/runtime/managed-playwright.js +7 -0
- package/dist/runtime/managed-playwright.js.map +1 -1
- package/dist/vendor/pdpp-connector-manager/LICENSE +202 -0
- package/dist/vendor/pdpp-connector-manager/NOTICE +2 -0
- package/dist/vendor/pdpp-connector-manager/VENDOR.md +27 -0
- package/dist/vendor/pdpp-connector-manager/catalog-schema-data.mjs +168 -0
- package/dist/vendor/pdpp-connector-manager/catalog-schema.mjs +62 -0
- package/dist/vendor/pdpp-connector-manager/index.d.mts +49 -0
- package/dist/vendor/pdpp-connector-manager/index.mjs +1646 -0
- package/dist/vendor/pdpp-connector-manager/oci-catalog.mjs +93 -0
- package/dist/vendor/pdpp-connector-manager/oci-registry.mjs +1002 -0
- package/dist/vendor/pdpp-connector-manager/oci-verify.mjs +515 -0
- package/dist/vendor/pdpp-connector-manager/package.json +51 -0
- package/dist/vendor/pdpp-connector-manager/retry.mjs +142 -0
- package/dist/vendor/pdpp-connector-manager/tar-stream.mjs +685 -0
- package/package.json +7 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/pdpp/profile.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChD,oBAAoB,CAAC,EAAE;QACrB,QAAQ,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;aAAE,CAAA;SAAE,CAAC;KACjD,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,2EAA2E;IAC3E,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC5B;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,MAAM,GACZ,iBAAiB,CAsBnB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function parseCollectionProfile(raw, where) {
|
|
2
|
+
if (!raw || typeof raw !== "object") {
|
|
3
|
+
throw new Error(`${where} is not a Collection Profile manifest.`);
|
|
4
|
+
}
|
|
5
|
+
const value = raw;
|
|
6
|
+
const streams = Array.isArray(value.streams) ? value.streams : [];
|
|
7
|
+
if (typeof value.connector_key !== "string" ||
|
|
8
|
+
typeof value.version !== "string" ||
|
|
9
|
+
streams.length === 0 ||
|
|
10
|
+
!streams.every((stream) => stream &&
|
|
11
|
+
typeof stream === "object" &&
|
|
12
|
+
typeof stream.name === "string")) {
|
|
13
|
+
throw new Error(`${where} is missing connector_key, version or named streams.`);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/pdpp/profile.ts"],"names":[],"mappings":"AAuCA,MAAM,UAAU,sBAAsB,CACpC,GAAY,EACZ,KAAa;IAEb,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,wCAAwC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,IACE,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QACvC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,CAAC,OAAO,CAAC,KAAK,CACZ,CAAC,MAAM,EAAE,EAAE,CACT,MAAM;YACN,OAAO,MAAM,KAAK,QAAQ;YAC1B,OAAQ,MAAkC,CAAC,IAAI,KAAK,QAAQ,CAC/D,EACD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,sDAAsD,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,KAAqC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host side of the Collection Profile protocol: one JSON object per line on
|
|
3
|
+
* stdin and stdout. The connector reads START, then emits records, cursors,
|
|
4
|
+
* progress and interaction requests, and ends with exactly one DONE.
|
|
5
|
+
*/
|
|
6
|
+
export interface StartMessage {
|
|
7
|
+
type: "START";
|
|
8
|
+
run_id: string;
|
|
9
|
+
collection_mode: "full_refresh" | "incremental";
|
|
10
|
+
scope: {
|
|
11
|
+
streams: Array<{
|
|
12
|
+
name: string;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
state: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface ConnectorRecord {
|
|
18
|
+
stream: string;
|
|
19
|
+
key: string;
|
|
20
|
+
data: Record<string, unknown>;
|
|
21
|
+
op?: "upsert" | "delete";
|
|
22
|
+
}
|
|
23
|
+
export interface SkipResult {
|
|
24
|
+
stream?: string;
|
|
25
|
+
reason?: string;
|
|
26
|
+
message?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface InteractionRequest {
|
|
29
|
+
requestId: string;
|
|
30
|
+
kind: string;
|
|
31
|
+
message: string;
|
|
32
|
+
schema?: {
|
|
33
|
+
properties?: Record<string, unknown>;
|
|
34
|
+
required?: string[];
|
|
35
|
+
};
|
|
36
|
+
timeoutMs: number;
|
|
37
|
+
}
|
|
38
|
+
export type InteractionReply = {
|
|
39
|
+
status: "success";
|
|
40
|
+
data?: Record<string, string>;
|
|
41
|
+
} | {
|
|
42
|
+
status: "cancelled";
|
|
43
|
+
message: string;
|
|
44
|
+
};
|
|
45
|
+
export interface RunOutcome {
|
|
46
|
+
status: "succeeded" | "failed" | "cancelled";
|
|
47
|
+
recordsEmitted: number;
|
|
48
|
+
error?: {
|
|
49
|
+
message: string;
|
|
50
|
+
code?: string;
|
|
51
|
+
retryable: boolean;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface RunProtocolOptions {
|
|
55
|
+
node: string;
|
|
56
|
+
args: string[];
|
|
57
|
+
cwd: string;
|
|
58
|
+
env: NodeJS.ProcessEnv;
|
|
59
|
+
start: StartMessage;
|
|
60
|
+
signal?: AbortSignal;
|
|
61
|
+
/** Silence after which a run is considered stuck; paused during interactions. */
|
|
62
|
+
idleTimeoutMs?: number;
|
|
63
|
+
onRecord(record: ConnectorRecord): void;
|
|
64
|
+
onState(stream: string, cursor: Record<string, unknown>): void;
|
|
65
|
+
onProgress(progress: {
|
|
66
|
+
stream?: string;
|
|
67
|
+
message: string;
|
|
68
|
+
count?: number;
|
|
69
|
+
total?: number;
|
|
70
|
+
}): void;
|
|
71
|
+
onSkip(skip: SkipResult): void;
|
|
72
|
+
onInteraction(request: InteractionRequest): Promise<InteractionReply>;
|
|
73
|
+
log(line: string): void;
|
|
74
|
+
}
|
|
75
|
+
export declare const DEFAULT_IDLE_TIMEOUT_MS: number;
|
|
76
|
+
/** The last few stderr lines for an error message, or nothing if they may carry a secret. */
|
|
77
|
+
export declare function stderrExcerpt(lines: string[]): string;
|
|
78
|
+
export declare function runCollectionProfile(options: RunProtocolOptions): Promise<RunOutcome>;
|
|
79
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/pdpp/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
export const DEFAULT_IDLE_TIMEOUT_MS = 15 * 60 * 1000;
|
|
3
|
+
const DEFAULT_INTERACTION_TIMEOUT_MS = 30 * 60 * 1000;
|
|
4
|
+
const MAX_LINE_BYTES = 16 * 1024 * 1024;
|
|
5
|
+
const KILL_GRACE_MS = 5_000;
|
|
6
|
+
// Protocol lines a host may see but has no use for; logged, not acted on.
|
|
7
|
+
const INFORMATIONAL_TYPES = new Set([
|
|
8
|
+
"ASSISTANCE",
|
|
9
|
+
"ASSISTANCE_STATUS",
|
|
10
|
+
"STREAM_EVIDENCE",
|
|
11
|
+
"DETAIL_GAP",
|
|
12
|
+
"DETAIL_GAP_ATTEMPTED",
|
|
13
|
+
"DETAIL_GAP_RECOVERED",
|
|
14
|
+
"DETAIL_COVERAGE",
|
|
15
|
+
]);
|
|
16
|
+
const SENSITIVE_STDERR = /authorization|bearer|token|secret|password|cookie|session|csrf/i;
|
|
17
|
+
/** The last few stderr lines for an error message, or nothing if they may carry a secret. */
|
|
18
|
+
export function stderrExcerpt(lines) {
|
|
19
|
+
const tail = lines.slice(-8).join("\n").slice(-2048);
|
|
20
|
+
if (!tail)
|
|
21
|
+
return "";
|
|
22
|
+
return SENSITIVE_STDERR.test(tail)
|
|
23
|
+
? "[stderr withheld: it may contain a credential]"
|
|
24
|
+
: tail;
|
|
25
|
+
}
|
|
26
|
+
function isObject(value) {
|
|
27
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
28
|
+
}
|
|
29
|
+
class ProtocolError extends Error {
|
|
30
|
+
}
|
|
31
|
+
export function runCollectionProfile(options) {
|
|
32
|
+
const streams = new Set(options.start.scope.streams.map((s) => s.name));
|
|
33
|
+
const idleTimeoutMs = options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
34
|
+
return new Promise((resolve) => {
|
|
35
|
+
const child = spawn(options.node, options.args, {
|
|
36
|
+
cwd: options.cwd,
|
|
37
|
+
env: options.env,
|
|
38
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
39
|
+
// Its own process group, so stopping the run also stops the browser
|
|
40
|
+
// the connector launched.
|
|
41
|
+
detached: process.platform !== "win32",
|
|
42
|
+
windowsHide: true,
|
|
43
|
+
});
|
|
44
|
+
let observedRecords = 0;
|
|
45
|
+
let done = null;
|
|
46
|
+
let failure = null;
|
|
47
|
+
let interactionPending = false;
|
|
48
|
+
let finished = false;
|
|
49
|
+
let idleTimer = null;
|
|
50
|
+
let killTimer = null;
|
|
51
|
+
const stderrLines = [];
|
|
52
|
+
const stop = () => {
|
|
53
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
54
|
+
return;
|
|
55
|
+
const signalGroup = (signal) => {
|
|
56
|
+
try {
|
|
57
|
+
if (child.pid && process.platform !== "win32") {
|
|
58
|
+
process.kill(-child.pid, signal);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
child.kill(signal);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Already gone.
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
signalGroup("SIGTERM");
|
|
69
|
+
killTimer ??= setTimeout(() => signalGroup("SIGKILL"), KILL_GRACE_MS);
|
|
70
|
+
};
|
|
71
|
+
const fail = (message, status = "failed") => {
|
|
72
|
+
if (failure)
|
|
73
|
+
return;
|
|
74
|
+
failure = {
|
|
75
|
+
status,
|
|
76
|
+
recordsEmitted: observedRecords,
|
|
77
|
+
error: { message, retryable: status !== "failed" },
|
|
78
|
+
};
|
|
79
|
+
options.log(`[host] ${message}`);
|
|
80
|
+
stop();
|
|
81
|
+
};
|
|
82
|
+
const clearIdle = () => {
|
|
83
|
+
if (idleTimer)
|
|
84
|
+
clearTimeout(idleTimer);
|
|
85
|
+
idleTimer = null;
|
|
86
|
+
};
|
|
87
|
+
const armIdle = () => {
|
|
88
|
+
clearIdle();
|
|
89
|
+
if (interactionPending || done)
|
|
90
|
+
return;
|
|
91
|
+
idleTimer = setTimeout(() => {
|
|
92
|
+
fail(`The connector sent nothing for ${Math.round(idleTimeoutMs / 60_000)} minutes, so the run was stopped.`);
|
|
93
|
+
}, idleTimeoutMs);
|
|
94
|
+
};
|
|
95
|
+
const write = (message) => {
|
|
96
|
+
if (child.stdin.writable) {
|
|
97
|
+
child.stdin.write(`${JSON.stringify(message)}\n`);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const onAbort = () => fail("Cancelled.", "cancelled");
|
|
101
|
+
if (options.signal?.aborted) {
|
|
102
|
+
onAbort();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
106
|
+
}
|
|
107
|
+
const answerInteraction = async (request) => {
|
|
108
|
+
interactionPending = true;
|
|
109
|
+
clearIdle();
|
|
110
|
+
let timeout = null;
|
|
111
|
+
const timedOut = new Promise((settle) => {
|
|
112
|
+
timeout = setTimeout(() => settle({
|
|
113
|
+
status: "cancelled",
|
|
114
|
+
message: "Nobody answered in time.",
|
|
115
|
+
}), request.timeoutMs);
|
|
116
|
+
});
|
|
117
|
+
let reply;
|
|
118
|
+
try {
|
|
119
|
+
reply = await Promise.race([options.onInteraction(request), timedOut]);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
reply = {
|
|
123
|
+
status: "cancelled",
|
|
124
|
+
message: error instanceof Error ? error.message : "Cancelled.",
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
if (timeout)
|
|
129
|
+
clearTimeout(timeout);
|
|
130
|
+
}
|
|
131
|
+
interactionPending = false;
|
|
132
|
+
if (finished || failure)
|
|
133
|
+
return;
|
|
134
|
+
write(reply.status === "success"
|
|
135
|
+
? {
|
|
136
|
+
type: "INTERACTION_RESPONSE",
|
|
137
|
+
request_id: request.requestId,
|
|
138
|
+
status: "success",
|
|
139
|
+
...(reply.data ? { data: reply.data } : {}),
|
|
140
|
+
}
|
|
141
|
+
: {
|
|
142
|
+
type: "INTERACTION_RESPONSE",
|
|
143
|
+
request_id: request.requestId,
|
|
144
|
+
status: "cancelled",
|
|
145
|
+
error: { message: reply.message },
|
|
146
|
+
});
|
|
147
|
+
armIdle();
|
|
148
|
+
};
|
|
149
|
+
const handle = (message) => {
|
|
150
|
+
const type = message.type;
|
|
151
|
+
if (done) {
|
|
152
|
+
throw new ProtocolError(`The connector sent ${String(type)} after DONE.`);
|
|
153
|
+
}
|
|
154
|
+
switch (type) {
|
|
155
|
+
case "RECORD": {
|
|
156
|
+
const { stream, key, data, op } = message;
|
|
157
|
+
if (typeof stream !== "string" || !streams.has(stream)) {
|
|
158
|
+
throw new ProtocolError(`RECORD for a stream that was not requested: ${String(stream)}`);
|
|
159
|
+
}
|
|
160
|
+
const recordKey = Array.isArray(key) ? JSON.stringify(key) : key;
|
|
161
|
+
if (typeof recordKey !== "string" ||
|
|
162
|
+
recordKey === "" ||
|
|
163
|
+
!isObject(data)) {
|
|
164
|
+
throw new ProtocolError(`RECORD in ${stream} has no key or no data object.`);
|
|
165
|
+
}
|
|
166
|
+
observedRecords += 1;
|
|
167
|
+
options.onRecord({
|
|
168
|
+
stream,
|
|
169
|
+
key: recordKey,
|
|
170
|
+
data,
|
|
171
|
+
op: op === "delete" ? "delete" : "upsert",
|
|
172
|
+
});
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
case "STATE": {
|
|
176
|
+
const { stream, cursor } = message;
|
|
177
|
+
if (typeof stream !== "string" ||
|
|
178
|
+
!streams.has(stream) ||
|
|
179
|
+
!isObject(cursor)) {
|
|
180
|
+
throw new ProtocolError(`STATE without a requested stream and cursor object.`);
|
|
181
|
+
}
|
|
182
|
+
options.onState(stream, cursor);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
case "PROGRESS":
|
|
186
|
+
options.onProgress({
|
|
187
|
+
stream: typeof message.stream === "string" ? message.stream : undefined,
|
|
188
|
+
message: typeof message.message === "string" ? message.message : "",
|
|
189
|
+
count: typeof message.count === "number" ? message.count : undefined,
|
|
190
|
+
total: typeof message.total === "number" ? message.total : undefined,
|
|
191
|
+
});
|
|
192
|
+
return;
|
|
193
|
+
case "SKIP_RESULT":
|
|
194
|
+
options.onSkip({
|
|
195
|
+
stream: typeof message.stream === "string" ? message.stream : undefined,
|
|
196
|
+
reason: typeof message.reason === "string" ? message.reason : undefined,
|
|
197
|
+
message: typeof message.message === "string" ? message.message : undefined,
|
|
198
|
+
});
|
|
199
|
+
return;
|
|
200
|
+
case "INTERACTION": {
|
|
201
|
+
if (interactionPending) {
|
|
202
|
+
throw new ProtocolError("A second INTERACTION arrived before the first was answered.");
|
|
203
|
+
}
|
|
204
|
+
const { request_id, kind, message: text, schema, timeout_seconds, } = message;
|
|
205
|
+
if (typeof request_id !== "string" ||
|
|
206
|
+
typeof kind !== "string" ||
|
|
207
|
+
typeof text !== "string") {
|
|
208
|
+
throw new ProtocolError("INTERACTION without request_id, kind and message.");
|
|
209
|
+
}
|
|
210
|
+
void answerInteraction({
|
|
211
|
+
requestId: request_id,
|
|
212
|
+
kind,
|
|
213
|
+
message: text,
|
|
214
|
+
schema: isObject(schema)
|
|
215
|
+
? schema
|
|
216
|
+
: undefined,
|
|
217
|
+
timeoutMs: typeof timeout_seconds === "number" && timeout_seconds > 0
|
|
218
|
+
? timeout_seconds * 1000
|
|
219
|
+
: DEFAULT_INTERACTION_TIMEOUT_MS,
|
|
220
|
+
});
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
case "DETAIL_GAPS_PAGE_REQUEST":
|
|
224
|
+
// This host keeps no detail-gap ledger, so every page is empty.
|
|
225
|
+
write({
|
|
226
|
+
type: "DETAIL_GAPS_PAGE_RESPONSE",
|
|
227
|
+
request_id: message.request_id,
|
|
228
|
+
reference_only: true,
|
|
229
|
+
detail_gaps: [],
|
|
230
|
+
});
|
|
231
|
+
return;
|
|
232
|
+
case "DONE": {
|
|
233
|
+
const error = isObject(message.error) ? message.error : null;
|
|
234
|
+
const recordsEmitted = typeof message.records_emitted === "number"
|
|
235
|
+
? message.records_emitted
|
|
236
|
+
: -1;
|
|
237
|
+
done = {
|
|
238
|
+
status: message.status === "succeeded" ? "succeeded" : "failed",
|
|
239
|
+
recordsEmitted,
|
|
240
|
+
...(error
|
|
241
|
+
? {
|
|
242
|
+
error: {
|
|
243
|
+
message: typeof error.message === "string"
|
|
244
|
+
? error.message
|
|
245
|
+
: "The connector failed.",
|
|
246
|
+
code: typeof error.code === "string" ? error.code : undefined,
|
|
247
|
+
retryable: error.retryable === true,
|
|
248
|
+
},
|
|
249
|
+
}
|
|
250
|
+
: {}),
|
|
251
|
+
};
|
|
252
|
+
clearIdle();
|
|
253
|
+
// The connector waits for stdin to close before it exits.
|
|
254
|
+
child.stdin.end();
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
default:
|
|
258
|
+
if (!INFORMATIONAL_TYPES.has(String(type))) {
|
|
259
|
+
options.log(`[host] ignored unknown message type ${String(type)}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
let buffer = "";
|
|
264
|
+
child.stdout.setEncoding("utf8");
|
|
265
|
+
child.stdout.on("data", (chunk) => {
|
|
266
|
+
buffer += chunk;
|
|
267
|
+
if (Buffer.byteLength(buffer) > MAX_LINE_BYTES &&
|
|
268
|
+
!buffer.includes("\n")) {
|
|
269
|
+
fail("The connector sent a line larger than 16 MiB.");
|
|
270
|
+
buffer = "";
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
let newline = buffer.indexOf("\n");
|
|
274
|
+
while (newline >= 0) {
|
|
275
|
+
const line = buffer.slice(0, newline).trim();
|
|
276
|
+
buffer = buffer.slice(newline + 1);
|
|
277
|
+
newline = buffer.indexOf("\n");
|
|
278
|
+
if (!line || failure)
|
|
279
|
+
continue;
|
|
280
|
+
let parsed;
|
|
281
|
+
try {
|
|
282
|
+
parsed = JSON.parse(line);
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
fail("The connector wrote something that is not a protocol message.");
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
if (!isObject(parsed)) {
|
|
289
|
+
fail("The connector wrote something that is not a protocol message.");
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
try {
|
|
293
|
+
handle(parsed);
|
|
294
|
+
armIdle();
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
fail(error instanceof Error ? error.message : String(error));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
child.stderr.setEncoding("utf8");
|
|
302
|
+
child.stderr.on("data", (chunk) => {
|
|
303
|
+
for (const line of chunk.split("\n")) {
|
|
304
|
+
if (!line)
|
|
305
|
+
continue;
|
|
306
|
+
options.log(`[connector] ${line}`);
|
|
307
|
+
stderrLines.push(line);
|
|
308
|
+
if (stderrLines.length > 50)
|
|
309
|
+
stderrLines.shift();
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
// The write side closes early when the connector exits; that is normal.
|
|
313
|
+
child.stdin.on("error", () => { });
|
|
314
|
+
child.on("error", (error) => {
|
|
315
|
+
fail(`Could not start the connector: ${error.message}`);
|
|
316
|
+
});
|
|
317
|
+
child.on("close", (code, signal) => {
|
|
318
|
+
finished = true;
|
|
319
|
+
clearIdle();
|
|
320
|
+
if (killTimer)
|
|
321
|
+
clearTimeout(killTimer);
|
|
322
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
323
|
+
if (failure) {
|
|
324
|
+
resolve(failure);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const excerpt = stderrExcerpt(stderrLines);
|
|
328
|
+
const withExcerpt = (message) => excerpt ? `${message}\n${excerpt}` : message;
|
|
329
|
+
if (!done) {
|
|
330
|
+
resolve({
|
|
331
|
+
status: "failed",
|
|
332
|
+
recordsEmitted: observedRecords,
|
|
333
|
+
error: {
|
|
334
|
+
message: withExcerpt(`The connector exited (${signal ?? `code ${code}`}) without finishing.`),
|
|
335
|
+
retryable: true,
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
const finalDone = done;
|
|
341
|
+
if (finalDone.status === "succeeded") {
|
|
342
|
+
if (code !== 0) {
|
|
343
|
+
resolve({
|
|
344
|
+
status: "failed",
|
|
345
|
+
recordsEmitted: observedRecords,
|
|
346
|
+
error: {
|
|
347
|
+
message: withExcerpt(`The connector reported success but exited with code ${code}.`),
|
|
348
|
+
retryable: true,
|
|
349
|
+
},
|
|
350
|
+
});
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
if (finalDone.recordsEmitted !== observedRecords) {
|
|
354
|
+
resolve({
|
|
355
|
+
status: "failed",
|
|
356
|
+
recordsEmitted: observedRecords,
|
|
357
|
+
error: {
|
|
358
|
+
message: `The connector reported ${finalDone.recordsEmitted} records but sent ${observedRecords}.`,
|
|
359
|
+
retryable: true,
|
|
360
|
+
},
|
|
361
|
+
});
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
resolve({ ...finalDone, recordsEmitted: observedRecords });
|
|
366
|
+
});
|
|
367
|
+
options.log(`[host] START ${JSON.stringify({ ...options.start, state: Object.keys(options.start.state) })}`);
|
|
368
|
+
write(options.start);
|
|
369
|
+
armIdle();
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/pdpp/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CliEvent, RuntimeState } from "../core/cli-types.js";
|
|
2
|
+
import type { RunConnectorOptions } from "../runtime/managed-playwright.js";
|
|
3
|
+
export interface PdppRuntimeOptions {
|
|
4
|
+
/** A data-connectors checkout to run the connector from, instead of an artifact. */
|
|
5
|
+
from?: string;
|
|
6
|
+
/** Owner of the Personal Server the data goes to; state is kept per owner. */
|
|
7
|
+
owner?: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function isPdppSource(source: string, options?: PdppRuntimeOptions): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Runs Collection Profile connectors behind the same interface as the
|
|
12
|
+
* managed Playwright runtime, so `vana connect` keeps one flow, one set of
|
|
13
|
+
* prompts and one stream of JSON events for both connector formats.
|
|
14
|
+
*/
|
|
15
|
+
export declare class PdppRuntime {
|
|
16
|
+
private readonly options;
|
|
17
|
+
readonly kind: "pdpp";
|
|
18
|
+
private launch;
|
|
19
|
+
private cachedState;
|
|
20
|
+
constructor(options?: PdppRuntimeOptions);
|
|
21
|
+
get installSummary(): {
|
|
22
|
+
lines: string[];
|
|
23
|
+
phase: string;
|
|
24
|
+
};
|
|
25
|
+
get state(): RuntimeState;
|
|
26
|
+
ensureInstalled(_autoApprove: boolean): Promise<{
|
|
27
|
+
runtime: RuntimeState;
|
|
28
|
+
runtimePath: string | null;
|
|
29
|
+
logPath?: string;
|
|
30
|
+
}>;
|
|
31
|
+
fetchConnector(source: string, _currentVersion?: string): Promise<{
|
|
32
|
+
connectorPath: string;
|
|
33
|
+
logPath: string;
|
|
34
|
+
version?: string;
|
|
35
|
+
exportFrequency?: string;
|
|
36
|
+
updated?: boolean;
|
|
37
|
+
previousVersion?: string;
|
|
38
|
+
}>;
|
|
39
|
+
runConnector(options: RunConnectorOptions): AsyncGenerator<CliEvent, void, void>;
|
|
40
|
+
private execute;
|
|
41
|
+
private interact;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/pdpp/runtime.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAqC5E,MAAM,WAAW,kBAAkB;IACjC,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAET;AAED;;;;GAIG;AACH,qBAAa,WAAW;IAKV,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAA6B;gBAEnB,OAAO,GAAE,kBAAuB;IAE7D,IAAI,cAAc,IAAI;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAOvD;IAED,IAAI,KAAK,IAAI,YAAY,CAKxB;IAEK,eAAe,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC;QACpD,OAAO,EAAE,YAAY,CAAC;QACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAkBI,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAqCK,YAAY,CACjB,OAAO,EAAE,mBAAmB,GAC3B,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;YAsDzB,OAAO;YA+KP,QAAQ;CAyHvB"}
|