@rynx-ai/daemon 0.1.9 → 0.1.10-beta.2

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 (50) hide show
  1. package/dist/app-browser-host-supervisor.d.ts +97 -0
  2. package/dist/app-browser-host-supervisor.js +529 -0
  3. package/dist/browser-artifact-management.d.ts +20 -0
  4. package/dist/browser-artifact-management.js +61 -0
  5. package/dist/chrome-for-testing-store.js +1 -1
  6. package/dist/chrome-inspection-gateway.d.ts +58 -0
  7. package/dist/chrome-inspection-gateway.js +806 -0
  8. package/dist/chrome-inspection-manager.d.ts +94 -0
  9. package/dist/chrome-inspection-manager.js +573 -0
  10. package/dist/cli.js +13 -2
  11. package/dist/control-client.d.ts +9 -0
  12. package/dist/control-client.js +63 -0
  13. package/dist/daemon-build-status.d.ts +8 -0
  14. package/dist/daemon-build-status.js +18 -0
  15. package/dist/daemon-server.d.ts +19 -2
  16. package/dist/daemon-server.js +615 -59
  17. package/dist/db.js +56 -0
  18. package/dist/desktop-browser-host-client.d.ts +2 -1
  19. package/dist/desktop-browser-host-client.js +3 -1
  20. package/dist/direct-runtime-authenticator.js +11 -6
  21. package/dist/headless-browser-host.js +18 -1
  22. package/dist/index-daemon.js +28 -1
  23. package/dist/maintenance-management.d.ts +11 -0
  24. package/dist/maintenance-management.js +13 -0
  25. package/dist/plugin-installer.d.ts +35 -0
  26. package/dist/plugin-installer.js +195 -94
  27. package/dist/plugin-management-service.d.ts +58 -0
  28. package/dist/plugin-management-service.js +240 -0
  29. package/dist/plugin-package.d.ts +26 -3
  30. package/dist/plugin-package.js +235 -56
  31. package/dist/pm2.js +37 -5
  32. package/dist/remote-runtime-access-store.d.ts +1 -0
  33. package/dist/remote-runtime-access-store.js +7 -0
  34. package/dist/remote-runtime-admin.d.ts +3 -0
  35. package/dist/remote-runtime-admin.js +3 -0
  36. package/dist/remote-runtime-connection-manager.d.ts +12 -1
  37. package/dist/remote-runtime-connection-manager.js +170 -4
  38. package/dist/remote-runtime-target-control.d.ts +5 -1
  39. package/dist/remote-runtime-target-control.js +62 -7
  40. package/dist/remote-runtime-target-store.d.ts +4 -1
  41. package/dist/remote-runtime-target-store.js +21 -2
  42. package/dist/session-log-store.js +29 -0
  43. package/dist/session-meta-store.js +3 -1
  44. package/dist/session-pending-message-store.d.ts +2 -0
  45. package/dist/session-pending-message-store.js +41 -0
  46. package/dist/session-resource-store.d.ts +32 -0
  47. package/dist/session-resource-store.js +700 -0
  48. package/dist/setup.d.ts +16 -0
  49. package/dist/setup.js +136 -2
  50. package/package.json +14 -9
@@ -0,0 +1,61 @@
1
+ import { resolveChromeForTestingRelease, } from "./chrome-for-testing-release-resolver.js";
2
+ import { createChromeForTestingArtifactStore, } from "./chrome-for-testing-store.js";
3
+ const MAX_PROGRESS_MESSAGES = 64;
4
+ const MAX_PROGRESS_MESSAGE_BYTES = 2 * 1024;
5
+ const MAX_PROGRESS_TOTAL_BYTES = 32 * 1024;
6
+ /** Daemon-owned Browser artifact operations exposed through local management. */
7
+ export function createBrowserArtifactManagementService(options = {}) {
8
+ const resolveRelease = options.resolveRelease ?? resolveChromeForTestingRelease;
9
+ const createStore = options.createStore ?? createChromeForTestingArtifactStore;
10
+ let store;
11
+ const artifactStore = () => store ??= createStore();
12
+ const install = async (input, context = {}) => {
13
+ const selector = "version" in input && input.version
14
+ ? { kind: "version", version: input.version }
15
+ : {
16
+ kind: "channel",
17
+ channel: releaseChannel(input.channel ?? "stable"),
18
+ };
19
+ const resolved = await resolveRelease(selector, { signal: context.signal });
20
+ const messages = [];
21
+ let messageBytes = 0;
22
+ const installed = await artifactStore().installResolved(resolved, {
23
+ signal: context.signal,
24
+ onProgress: (message) => {
25
+ if (messages.length >= MAX_PROGRESS_MESSAGES)
26
+ return;
27
+ const bounded = boundedUtf8(message, MAX_PROGRESS_MESSAGE_BYTES);
28
+ const bytes = Buffer.byteLength(bounded, "utf8");
29
+ if (messageBytes + bytes > MAX_PROGRESS_TOTAL_BYTES)
30
+ return;
31
+ messageBytes += bytes;
32
+ messages.push(bounded);
33
+ },
34
+ });
35
+ return { resolved, installed, messages };
36
+ };
37
+ return {
38
+ install,
39
+ update: install,
40
+ version: () => ({ installed: artifactStore().readActive() ?? null }),
41
+ clean: () => artifactStore().pruneBuilds(),
42
+ };
43
+ }
44
+ function releaseChannel(channel) {
45
+ switch (channel) {
46
+ case "stable":
47
+ return "Stable";
48
+ case "beta":
49
+ return "Beta";
50
+ case "dev":
51
+ return "Dev";
52
+ case "canary":
53
+ return "Canary";
54
+ }
55
+ }
56
+ function boundedUtf8(value, maxBytes) {
57
+ const bytes = Buffer.from(value, "utf8");
58
+ if (bytes.byteLength <= maxBytes)
59
+ return value;
60
+ return bytes.subarray(0, maxBytes).toString("utf8").replace(/\uFFFD$/u, "");
61
+ }
@@ -9,9 +9,9 @@ import { createHash } from "node:crypto";
9
9
  import { accessSync, chmodSync, closeSync, existsSync, lstatSync, mkdirSync, mkdtempSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync, writeSync, } from "node:fs";
10
10
  import { constants as fsConstants } from "node:fs";
11
11
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
12
- import extractZipArchive from "@electron-internal/extract-zip";
13
12
  import { rynxHome } from "@rynx-ai/core";
14
13
  import Database from "better-sqlite3";
14
+ import extractZipArchive from "extract-zip";
15
15
  const BUILD_OWNER_FILE = ".rynx-cft-owner.json";
16
16
  const STAGING_OWNER_FILE = ".rynx-cft-staging-owner.json";
17
17
  const ACTIVE_MANIFEST_FILE = "active.json";
@@ -0,0 +1,58 @@
1
+ declare const LOOPBACK_HOST = "127.0.0.1";
2
+ export interface ChromeInspectionTarget {
3
+ /** Stable only for the exact daemon boot, Browser generation, and Page. */
4
+ key: string;
5
+ title: string;
6
+ url: string;
7
+ description: string;
8
+ engineVersion: string;
9
+ }
10
+ export interface ChromeInspectionTargetSource {
11
+ /** Discovery must only project existing targets; it must never create a Browser. */
12
+ listTargets(): Promise<readonly ChromeInspectionTarget[]>;
13
+ /** Resolve again at attach time so stale routes fail closed. */
14
+ resolveWebSocketEndpoint?(target: ChromeInspectionTarget): Promise<string>;
15
+ /**
16
+ * Open an already-authenticated attachment without publishing another local
17
+ * listener. Remote Runtime targets use this path.
18
+ */
19
+ openConnection?(target: ChromeInspectionTarget, options?: {
20
+ signal?: AbortSignal;
21
+ }): Promise<ChromeInspectionConnection | undefined>;
22
+ activate?(target: ChromeInspectionTarget): Promise<void>;
23
+ close?(target: ChromeInspectionTarget): Promise<void>;
24
+ }
25
+ export type ChromeInspectionMessage = {
26
+ binary: false;
27
+ data: string;
28
+ } | {
29
+ binary: true;
30
+ data: Uint8Array;
31
+ };
32
+ export interface ChromeInspectionConnection extends AsyncIterable<ChromeInspectionMessage> {
33
+ send(message: ChromeInspectionMessage): Promise<void>;
34
+ close(): Promise<void>;
35
+ }
36
+ export interface StartChromeInspectionGatewayOptions {
37
+ source: ChromeInspectionTargetSource;
38
+ port?: number;
39
+ openTimeoutMs?: number;
40
+ maxConnections?: number;
41
+ maxPendingOpenings?: number;
42
+ randomToken?: () => string;
43
+ onError?: (error: Error, context: string) => void;
44
+ }
45
+ export interface ChromeInspectionGateway {
46
+ readonly host: typeof LOOPBACK_HOST;
47
+ readonly port: number;
48
+ readonly httpEndpoint: string;
49
+ shutdown(): Promise<void>;
50
+ }
51
+ /**
52
+ * Stable loopback discovery endpoint consumed by stock Chrome.
53
+ *
54
+ * This gateway owns no Browser. It rewrites only discovery metadata and then
55
+ * bridges each DevTools WebSocket to an exact target supplied by the daemon.
56
+ */
57
+ export declare function startChromeInspectionGateway(options: StartChromeInspectionGatewayOptions): Promise<ChromeInspectionGateway>;
58
+ export {};