wake-bridge 0.9.0-preview.8

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 (115) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +222 -0
  3. package/dist/src/adapters/botlingknows.d.ts +42 -0
  4. package/dist/src/adapters/botlingknows.js +141 -0
  5. package/dist/src/adapters/botlingknows.js.map +1 -0
  6. package/dist/src/adapters/group-chat.d.ts +43 -0
  7. package/dist/src/adapters/group-chat.js +120 -0
  8. package/dist/src/adapters/group-chat.js.map +1 -0
  9. package/dist/src/cli.d.ts +2 -0
  10. package/dist/src/cli.js +637 -0
  11. package/dist/src/cli.js.map +1 -0
  12. package/dist/src/connector-catalog.d.ts +17 -0
  13. package/dist/src/connector-catalog.js +43 -0
  14. package/dist/src/connector-catalog.js.map +1 -0
  15. package/dist/src/connectors/botlingknows-mcp.d.ts +15 -0
  16. package/dist/src/connectors/botlingknows-mcp.js +130 -0
  17. package/dist/src/connectors/botlingknows-mcp.js.map +1 -0
  18. package/dist/src/connectors/group-chat-http.d.ts +17 -0
  19. package/dist/src/connectors/group-chat-http.js +226 -0
  20. package/dist/src/connectors/group-chat-http.js.map +1 -0
  21. package/dist/src/connectors/mcp-http-client.d.ts +11 -0
  22. package/dist/src/connectors/mcp-http-client.js +108 -0
  23. package/dist/src/connectors/mcp-http-client.js.map +1 -0
  24. package/dist/src/core.d.ts +170 -0
  25. package/dist/src/core.js +1720 -0
  26. package/dist/src/core.js.map +1 -0
  27. package/dist/src/daemon.d.ts +31 -0
  28. package/dist/src/daemon.js +605 -0
  29. package/dist/src/daemon.js.map +1 -0
  30. package/dist/src/db.d.ts +31 -0
  31. package/dist/src/db.js +513 -0
  32. package/dist/src/db.js.map +1 -0
  33. package/dist/src/event-sdk.d.ts +43 -0
  34. package/dist/src/event-sdk.js +152 -0
  35. package/dist/src/event-sdk.js.map +1 -0
  36. package/dist/src/host-adapter-registry.d.ts +21 -0
  37. package/dist/src/host-adapter-registry.js +59 -0
  38. package/dist/src/host-adapter-registry.js.map +1 -0
  39. package/dist/src/index.d.ts +5 -0
  40. package/dist/src/index.js +6 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/instance-config.d.ts +46 -0
  43. package/dist/src/instance-config.js +176 -0
  44. package/dist/src/instance-config.js.map +1 -0
  45. package/dist/src/mcp.d.ts +51 -0
  46. package/dist/src/mcp.js +728 -0
  47. package/dist/src/mcp.js.map +1 -0
  48. package/dist/src/operator-control.d.ts +82 -0
  49. package/dist/src/operator-control.js +220 -0
  50. package/dist/src/operator-control.js.map +1 -0
  51. package/dist/src/out-of-process-host.d.ts +37 -0
  52. package/dist/src/out-of-process-host.js +196 -0
  53. package/dist/src/out-of-process-host.js.map +1 -0
  54. package/dist/src/policy-control.d.ts +3 -0
  55. package/dist/src/policy-control.js +120 -0
  56. package/dist/src/policy-control.js.map +1 -0
  57. package/dist/src/release-lifecycle.d.ts +98 -0
  58. package/dist/src/release-lifecycle.js +378 -0
  59. package/dist/src/release-lifecycle.js.map +1 -0
  60. package/dist/src/sdk-error.d.ts +6 -0
  61. package/dist/src/sdk-error.js +12 -0
  62. package/dist/src/sdk-error.js.map +1 -0
  63. package/dist/src/source-adapter.d.ts +32 -0
  64. package/dist/src/source-adapter.js +164 -0
  65. package/dist/src/source-adapter.js.map +1 -0
  66. package/dist/src/source-connector.d.ts +50 -0
  67. package/dist/src/source-connector.js +358 -0
  68. package/dist/src/source-connector.js.map +1 -0
  69. package/dist/src/source-control-client.d.ts +38 -0
  70. package/dist/src/source-control-client.js +61 -0
  71. package/dist/src/source-control-client.js.map +1 -0
  72. package/dist/src/source-ingress.d.ts +16 -0
  73. package/dist/src/source-ingress.js +47 -0
  74. package/dist/src/source-ingress.js.map +1 -0
  75. package/dist/src/source-sdk.d.ts +6 -0
  76. package/dist/src/source-sdk.js +53 -0
  77. package/dist/src/source-sdk.js.map +1 -0
  78. package/dist/src/transport-sdk.d.ts +102 -0
  79. package/dist/src/transport-sdk.js +222 -0
  80. package/dist/src/transport-sdk.js.map +1 -0
  81. package/dist/src/transport.d.ts +23 -0
  82. package/dist/src/transport.js +71 -0
  83. package/dist/src/transport.js.map +1 -0
  84. package/dist/src/types.d.ts +522 -0
  85. package/dist/src/types.js +2 -0
  86. package/dist/src/types.js.map +1 -0
  87. package/dist/src/util.d.ts +26 -0
  88. package/dist/src/util.js +136 -0
  89. package/dist/src/util.js.map +1 -0
  90. package/dist/src/version.d.ts +1 -0
  91. package/dist/src/version.js +2 -0
  92. package/dist/src/version.js.map +1 -0
  93. package/docs/adapters/botlingknows.md +40 -0
  94. package/docs/adapters/gmail-planned.md +16 -0
  95. package/docs/adapters/group-chat.md +126 -0
  96. package/docs/operations/connector-catalog.md +40 -0
  97. package/docs/operations/operator-control.md +83 -0
  98. package/docs/operations/out-of-process-host-adapter.md +150 -0
  99. package/docs/operations/policies.md +106 -0
  100. package/docs/operations/public-sdk.md +87 -0
  101. package/docs/operations/release-lifecycle.md +154 -0
  102. package/docs/operations/source-connectors.md +163 -0
  103. package/docs/operations/source-ingress.md +108 -0
  104. package/docs/operations/templates/botlingknows-connector.env.example +5 -0
  105. package/docs/operations/templates/sources.json.example +15 -0
  106. package/docs/quickstart.md +143 -0
  107. package/docs/releases/0.9.0-preview.8.md +44 -0
  108. package/docs/verification.md +19 -0
  109. package/examples/policies/botlingknows-conservative.json +44 -0
  110. package/examples/reference-host-adapter/README.md +41 -0
  111. package/examples/reference-host-adapter/adapter.mjs +173 -0
  112. package/examples/reference-host-adapter/host-adapters.json.example +26 -0
  113. package/package.json +94 -0
  114. package/schemas/event-v1.schema.json +26 -0
  115. package/schemas/policy-v1.schema.json +66 -0
@@ -0,0 +1,120 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { BridgeError, normalizePolicy } from "./core.js";
3
+ import { stableJson } from "./util.js";
4
+ const POLICY_KEYS = new Set(["id", "version", "enabled", "order", "match", "delivery", "batch", "target", "reason_code", "expires_after_ms"]);
5
+ const DELIVERY_KEYS = new Set(["mode", "scheduled_local_time", "quiet_hours_policy", "foreground_presence_policy"]);
6
+ const BATCH_KEYS = new Set(["coalesce_by", "max_events", "window_ms"]);
7
+ const TARGET_KEYS = new Set(["attention_channel"]);
8
+ const PUBLIC_MODES = new Set(["immediate", "scheduled", "suppress"]);
9
+ const POLICY_ID = /^[a-z][a-z0-9._-]{0,127}$/u;
10
+ const LOCAL_TIME = /^(?:[01]\d|2[0-3]):[0-5]\d$/u;
11
+ function object(value, field) {
12
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
13
+ throw new BridgeError(`${field} must be an object`, "invalid_policy_file", 400);
14
+ }
15
+ return value;
16
+ }
17
+ function rejectUnknown(value, allowed, field) {
18
+ const unknown = Object.keys(value).filter((key) => !allowed.has(key));
19
+ if (unknown.length)
20
+ throw new BridgeError(`${field} contains unsupported field(s): ${unknown.join(", ")}`, "unsupported_policy_field", 400);
21
+ }
22
+ function publicPolicy(value, index) {
23
+ const raw = object(value, `policies[${index}]`);
24
+ rejectUnknown(raw, POLICY_KEYS, `policies[${index}]`);
25
+ if (typeof raw.id !== "string" || !POLICY_ID.test(raw.id)) {
26
+ throw new BridgeError(`policies[${index}].id must match ${POLICY_ID}`, "invalid_policy_file", 400);
27
+ }
28
+ if (!Number.isSafeInteger(raw.version) || Number(raw.version) < 1) {
29
+ throw new BridgeError(`policies[${index}].version must be a positive safe integer`, "invalid_policy_file", 400);
30
+ }
31
+ if (raw.order != null && (!Number.isSafeInteger(raw.order) || Math.abs(Number(raw.order)) > 1_000_000)) {
32
+ throw new BridgeError(`policies[${index}].order must be an integer between -1000000 and 1000000`, "invalid_policy_file", 400);
33
+ }
34
+ if (raw.match != null) {
35
+ object(raw.match, `policies[${index}].match`);
36
+ if (JSON.stringify(raw.match).length > 8192)
37
+ throw new BridgeError(`policies[${index}].match is too large`, "invalid_policy_file", 400);
38
+ }
39
+ const delivery = object(raw.delivery, `policies[${index}].delivery`);
40
+ rejectUnknown(delivery, DELIVERY_KEYS, `policies[${index}].delivery`);
41
+ if (typeof delivery.mode !== "string" || !PUBLIC_MODES.has(delivery.mode)) {
42
+ throw new BridgeError(`policies[${index}].delivery.mode must be immediate, scheduled, or suppress; debounce and digest are not supported by policy v1`, "unsupported_policy_mode", 400);
43
+ }
44
+ if (delivery.mode === "scheduled" && (typeof delivery.scheduled_local_time !== "string" || !LOCAL_TIME.test(delivery.scheduled_local_time))) {
45
+ throw new BridgeError(`policies[${index}].delivery.scheduled_local_time must be HH:MM`, "invalid_policy_file", 400);
46
+ }
47
+ if (delivery.mode !== "scheduled" && delivery.scheduled_local_time != null) {
48
+ throw new BridgeError(`policies[${index}].delivery.scheduled_local_time is only valid for scheduled mode`, "invalid_policy_file", 400);
49
+ }
50
+ if (delivery.quiet_hours_policy != null && !["defer", "bypass"].includes(String(delivery.quiet_hours_policy))) {
51
+ throw new BridgeError(`policies[${index}].delivery.quiet_hours_policy must be defer or bypass`, "invalid_policy_file", 400);
52
+ }
53
+ if (delivery.foreground_presence_policy != null && !["defer", "bypass"].includes(String(delivery.foreground_presence_policy))) {
54
+ throw new BridgeError(`policies[${index}].delivery.foreground_presence_policy must be defer or bypass`, "invalid_policy_file", 400);
55
+ }
56
+ if (raw.batch != null) {
57
+ const batch = object(raw.batch, `policies[${index}].batch`);
58
+ rejectUnknown(batch, BATCH_KEYS, `policies[${index}].batch`);
59
+ if (batch.coalesce_by != null && (typeof batch.coalesce_by !== "string" || !batch.coalesce_by || batch.coalesce_by.length > 256)) {
60
+ throw new BridgeError(`policies[${index}].batch.coalesce_by must be a non-empty bounded string`, "invalid_policy_file", 400);
61
+ }
62
+ if (batch.max_events != null && (!Number.isSafeInteger(batch.max_events) || Number(batch.max_events) < 1 || Number(batch.max_events) > 1000)) {
63
+ throw new BridgeError(`policies[${index}].batch.max_events must be an integer between 1 and 1000`, "invalid_policy_file", 400);
64
+ }
65
+ if (batch.window_ms != null && (!Number.isSafeInteger(batch.window_ms) || Number(batch.window_ms) < 0 || Number(batch.window_ms) > 7 * 24 * 60 * 60_000)) {
66
+ throw new BridgeError(`policies[${index}].batch.window_ms must be an integer between 0 and 604800000`, "invalid_policy_file", 400);
67
+ }
68
+ }
69
+ if (raw.target != null) {
70
+ const target = object(raw.target, `policies[${index}].target`);
71
+ rejectUnknown(target, TARGET_KEYS, `policies[${index}].target`);
72
+ if (target.attention_channel != null && (typeof target.attention_channel !== "string" || !target.attention_channel || target.attention_channel.length > 200)) {
73
+ throw new BridgeError(`policies[${index}].target.attention_channel must be a non-empty string of at most 200 characters`, "invalid_policy_file", 400);
74
+ }
75
+ }
76
+ if (raw.reason_code != null && (typeof raw.reason_code !== "string" || !raw.reason_code || raw.reason_code.length > 128)) {
77
+ throw new BridgeError(`policies[${index}].reason_code must be a non-empty string of at most 128 characters`, "invalid_policy_file", 400);
78
+ }
79
+ if (raw.expires_after_ms != null && (!Number.isSafeInteger(raw.expires_after_ms) || Number(raw.expires_after_ms) < 0)) {
80
+ throw new BridgeError(`policies[${index}].expires_after_ms must be a non-negative safe integer`, "invalid_policy_file", 400);
81
+ }
82
+ if (raw.id === "default" && (raw.enabled === false || stableJson(raw.match ?? {}) !== "{}")) {
83
+ throw new BridgeError("policy file requires one enabled default policy with an empty match", "missing_default_policy", 400);
84
+ }
85
+ return normalizePolicy(raw);
86
+ }
87
+ export function validatePolicyFile(value) {
88
+ const raw = object(value, "policy file");
89
+ rejectUnknown(raw, new Set(["schema_version", "policies"]), "policy file");
90
+ if (raw.schema_version !== 1)
91
+ throw new BridgeError("policy file schema_version must be 1", "unsupported_policy_schema", 400);
92
+ if (!Array.isArray(raw.policies) || raw.policies.length < 1 || raw.policies.length > 256) {
93
+ throw new BridgeError("policy file policies must contain between 1 and 256 rules", "invalid_policy_file", 400);
94
+ }
95
+ const policies = raw.policies.map(publicPolicy);
96
+ const ids = new Set();
97
+ for (const policy of policies) {
98
+ if (ids.has(policy.id))
99
+ throw new BridgeError(`policy file contains more than one version of ${policy.id}`, "duplicate_policy_id", 400);
100
+ ids.add(policy.id);
101
+ }
102
+ const defaultPolicy = policies.find((policy) => policy.id === "default");
103
+ if (!defaultPolicy || defaultPolicy.enabled === false || stableJson(defaultPolicy.match ?? {}) !== "{}") {
104
+ throw new BridgeError("policy file requires one enabled default policy with an empty match", "missing_default_policy", 400);
105
+ }
106
+ return { schema_version: 1, policies };
107
+ }
108
+ export function loadPolicyFile(path) {
109
+ if (!path)
110
+ throw new BridgeError("policy file path is required", "invalid_policy_file", 400);
111
+ let value;
112
+ try {
113
+ value = JSON.parse(readFileSync(path, "utf8"));
114
+ }
115
+ catch (error) {
116
+ throw new BridgeError(`cannot read policy file ${path}: ${String(error)}`, "invalid_policy_file", 400);
117
+ }
118
+ return validatePolicyFile(value);
119
+ }
120
+ //# sourceMappingURL=policy-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-control.js","sourceRoot":"","sources":["../../src/policy-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ export { RELEASE_VERSION } from "./version.js";
2
+ export declare const MINIMUM_NODE_MAJOR = 20;
3
+ export declare const MINIMUM_SQLITE_VERSION = "3.33.0";
4
+ export declare const SUPPORTED_PLATFORMS: readonly ["darwin"];
5
+ export declare const SUPPORTED_ARCHITECTURES: readonly ["arm64", "x64"];
6
+ interface BackupManifest {
7
+ format_version: 1;
8
+ package_version: string;
9
+ instance_id: string;
10
+ owner_id: string;
11
+ created_at: string;
12
+ source_schema_version: number;
13
+ database_file: "wake-bridge.sqlite";
14
+ database_sha256: string;
15
+ }
16
+ export interface ReleasePreflight {
17
+ ok: boolean;
18
+ release: {
19
+ package_version: string;
20
+ platform: string;
21
+ architecture: string;
22
+ platform_supported: boolean;
23
+ architecture_supported: boolean;
24
+ };
25
+ runtime: {
26
+ node: {
27
+ installed_version: string;
28
+ minimum_major: number;
29
+ supported: boolean;
30
+ };
31
+ sqlite3: {
32
+ available: boolean;
33
+ installed_version: string | null;
34
+ minimum_version: string;
35
+ supported: boolean;
36
+ json_output: boolean;
37
+ };
38
+ };
39
+ instance: {
40
+ configured: boolean;
41
+ config_path: string | null;
42
+ security_ready: boolean;
43
+ schema_version: number | null;
44
+ current_schema_version: number;
45
+ minimum_upgrade_schema_version: number;
46
+ schema_state: "not_configured" | "current" | "upgrade_required" | "too_old" | "too_new" | "unreadable";
47
+ integrity: "ok" | "failed" | "not_checked";
48
+ error: string | null;
49
+ };
50
+ }
51
+ export declare function databaseStatus(dbPath: string): {
52
+ schema_version: number;
53
+ integrity: "ok" | "failed";
54
+ };
55
+ export declare function releasePreflight(configPath?: string): ReleasePreflight;
56
+ export declare function backupInstance(configPath: string, outputDirectory: string): BackupManifest & {
57
+ backup_directory: string;
58
+ };
59
+ export declare function restoreInstance(options: {
60
+ config_path: string;
61
+ backup_directory: string;
62
+ rollback_output: string;
63
+ confirm_instance_id: string;
64
+ confirm_offline: boolean;
65
+ }): {
66
+ restored: true;
67
+ schema_version: number;
68
+ rollback_backup: string;
69
+ };
70
+ export declare function upgradeInstance(configPath: string, backupOutput: string, confirmOffline?: boolean): {
71
+ upgraded: boolean;
72
+ from_schema: number;
73
+ to_schema: number;
74
+ backup_directory: string | null;
75
+ };
76
+ export declare function installMacLaunchAgent(options: {
77
+ config_path: string;
78
+ launch_agents_directory?: string;
79
+ logs_directory?: string;
80
+ cli_path?: string;
81
+ port?: number;
82
+ }): {
83
+ installed: true;
84
+ label: string;
85
+ plist_path: string;
86
+ load_command: string;
87
+ unload_command: string;
88
+ };
89
+ export declare function uninstallMacLaunchAgent(options: {
90
+ config_path: string;
91
+ launch_agents_directory?: string;
92
+ }): {
93
+ uninstalled: true;
94
+ label: string;
95
+ plist_path: string;
96
+ removed: boolean;
97
+ data_preserved: true;
98
+ };
@@ -0,0 +1,378 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { spawnSync } from "node:child_process";
3
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync, } from "node:fs";
4
+ import { homedir } from "node:os";
5
+ import { basename, dirname, join, resolve } from "node:path";
6
+ import { WakeBridge } from "./core.js";
7
+ import { CURRENT_SCHEMA_VERSION, MIN_SUPPORTED_SCHEMA_VERSION } from "./db.js";
8
+ import { instanceConfigSecurity, loadInstanceConfig } from "./instance-config.js";
9
+ import { RELEASE_VERSION } from "./version.js";
10
+ export { RELEASE_VERSION } from "./version.js";
11
+ export const MINIMUM_NODE_MAJOR = 20;
12
+ export const MINIMUM_SQLITE_VERSION = "3.33.0";
13
+ export const SUPPORTED_PLATFORMS = ["darwin"];
14
+ export const SUPPORTED_ARCHITECTURES = ["arm64", "x64"];
15
+ function versionParts(value) {
16
+ const match = /^(\d+)\.(\d+)\.(\d+)/u.exec(value.trim());
17
+ return match ? match.slice(1).map(Number) : [];
18
+ }
19
+ function versionAtLeast(actual, minimum) {
20
+ const left = versionParts(actual);
21
+ const right = versionParts(minimum);
22
+ if (left.length !== 3 || right.length !== 3)
23
+ return false;
24
+ for (let index = 0; index < 3; index += 1) {
25
+ if (left[index] !== right[index])
26
+ return left[index] > right[index];
27
+ }
28
+ return true;
29
+ }
30
+ function sqlite(args, input) {
31
+ const result = spawnSync("sqlite3", args, {
32
+ input,
33
+ encoding: "utf8",
34
+ maxBuffer: 32 * 1024 * 1024,
35
+ });
36
+ if (result.error)
37
+ throw result.error;
38
+ if (result.status !== 0)
39
+ throw new Error(`sqlite3 failed (${result.status}): ${(result.stderr || result.stdout || "").trim()}`);
40
+ return (result.stdout || "").trim();
41
+ }
42
+ function sqliteVersion() {
43
+ try {
44
+ const raw = sqlite(["--version"]);
45
+ const version = raw.split(/\s+/u)[0] || null;
46
+ let jsonOutput = false;
47
+ try {
48
+ const parsed = JSON.parse(sqlite(["-batch", "-json", ":memory:"], "SELECT 1 AS ok;\n"));
49
+ jsonOutput = parsed[0]?.ok === 1;
50
+ }
51
+ catch {
52
+ jsonOutput = false;
53
+ }
54
+ return { available: true, version, json_output: jsonOutput };
55
+ }
56
+ catch {
57
+ return { available: false, version: null, json_output: false };
58
+ }
59
+ }
60
+ function sqliteScalar(dbPath, sql, field) {
61
+ const output = sqlite(["-batch", "-json", dbPath], `${sql}\n`);
62
+ const parsed = JSON.parse(output);
63
+ return String(parsed[0]?.[field] ?? "");
64
+ }
65
+ export function databaseStatus(dbPath) {
66
+ if (!existsSync(dbPath))
67
+ throw new Error(`instance database does not exist: ${dbPath}`);
68
+ const schemaVersion = Number(sqliteScalar(dbPath, "PRAGMA user_version;", "user_version"));
69
+ const quickCheck = sqliteScalar(dbPath, "PRAGMA quick_check;", "quick_check");
70
+ return { schema_version: schemaVersion, integrity: quickCheck === "ok" ? "ok" : "failed" };
71
+ }
72
+ function checkpointDatabase(dbPath) {
73
+ const output = sqlite(["-batch", "-json", dbPath], ".timeout 5000\nPRAGMA wal_checkpoint(TRUNCATE);\n");
74
+ const row = JSON.parse(output)[0];
75
+ if (!row || row.busy !== 0 || row.log !== row.checkpointed) {
76
+ throw new Error("database WAL checkpoint is busy; stop the daemon before this operation");
77
+ }
78
+ }
79
+ function schemaState(version) {
80
+ if (version === CURRENT_SCHEMA_VERSION)
81
+ return "current";
82
+ if (version > CURRENT_SCHEMA_VERSION)
83
+ return "too_new";
84
+ if (version >= MIN_SUPPORTED_SCHEMA_VERSION)
85
+ return "upgrade_required";
86
+ return "too_old";
87
+ }
88
+ export function releasePreflight(configPath) {
89
+ const nodeMajor = Number(process.versions.node.split(".")[0]);
90
+ const sqliteRuntime = sqliteVersion();
91
+ const platformSupported = SUPPORTED_PLATFORMS.includes(process.platform);
92
+ const architectureSupported = SUPPORTED_ARCHITECTURES.includes(process.arch);
93
+ const sqliteSupported = Boolean(sqliteRuntime.version)
94
+ && versionAtLeast(sqliteRuntime.version, MINIMUM_SQLITE_VERSION)
95
+ && sqliteRuntime.json_output;
96
+ const instance = {
97
+ configured: Boolean(configPath),
98
+ config_path: configPath ? resolve(configPath) : null,
99
+ security_ready: false,
100
+ schema_version: null,
101
+ current_schema_version: CURRENT_SCHEMA_VERSION,
102
+ minimum_upgrade_schema_version: MIN_SUPPORTED_SCHEMA_VERSION,
103
+ schema_state: configPath ? "unreadable" : "not_configured",
104
+ integrity: "not_checked",
105
+ error: null,
106
+ };
107
+ if (configPath) {
108
+ try {
109
+ const security = instanceConfigSecurity(configPath);
110
+ instance.security_ready = security.ready;
111
+ if (!security.ready)
112
+ throw new Error(security.error || "instance security preflight failed");
113
+ const config = loadInstanceConfig(configPath);
114
+ const status = databaseStatus(config.db_path);
115
+ instance.schema_version = status.schema_version;
116
+ instance.schema_state = schemaState(status.schema_version);
117
+ instance.integrity = status.integrity;
118
+ }
119
+ catch (error) {
120
+ instance.error = error instanceof Error ? error.message : String(error);
121
+ instance.schema_state = "unreadable";
122
+ }
123
+ }
124
+ const nodeSupported = Number.isSafeInteger(nodeMajor) && nodeMajor >= MINIMUM_NODE_MAJOR;
125
+ return {
126
+ ok: platformSupported && architectureSupported && nodeSupported && sqliteSupported
127
+ && (!configPath || (instance.security_ready && instance.schema_state === "current" && instance.integrity === "ok")),
128
+ release: {
129
+ package_version: RELEASE_VERSION,
130
+ platform: process.platform,
131
+ architecture: process.arch,
132
+ platform_supported: platformSupported,
133
+ architecture_supported: architectureSupported,
134
+ },
135
+ runtime: {
136
+ node: { installed_version: process.versions.node, minimum_major: MINIMUM_NODE_MAJOR, supported: nodeSupported },
137
+ sqlite3: {
138
+ available: sqliteRuntime.available,
139
+ installed_version: sqliteRuntime.version,
140
+ minimum_version: MINIMUM_SQLITE_VERSION,
141
+ supported: sqliteSupported,
142
+ json_output: sqliteRuntime.json_output,
143
+ },
144
+ },
145
+ instance,
146
+ };
147
+ }
148
+ function sha256(path) {
149
+ return createHash("sha256").update(readFileSync(path)).digest("hex");
150
+ }
151
+ function sqlString(value) {
152
+ return `'${value.replaceAll("'", "''")}'`;
153
+ }
154
+ function readBackupManifest(backupDir) {
155
+ const directory = resolve(backupDir);
156
+ const manifestPath = join(directory, "manifest.json");
157
+ let manifest;
158
+ try {
159
+ manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
160
+ }
161
+ catch (error) {
162
+ throw new Error(`backup manifest is unreadable: ${String(error)}`);
163
+ }
164
+ if (manifest?.format_version !== 1 || manifest.database_file !== "wake-bridge.sqlite"
165
+ || typeof manifest.instance_id !== "string" || typeof manifest.database_sha256 !== "string"
166
+ || !Number.isSafeInteger(manifest.source_schema_version)) {
167
+ throw new Error("backup manifest is invalid");
168
+ }
169
+ const databasePath = join(directory, manifest.database_file);
170
+ if (!existsSync(databasePath) || sha256(databasePath) !== manifest.database_sha256) {
171
+ throw new Error("backup database checksum does not match manifest");
172
+ }
173
+ const status = databaseStatus(databasePath);
174
+ if (status.integrity !== "ok" || status.schema_version !== manifest.source_schema_version) {
175
+ throw new Error("backup database failed schema or integrity verification");
176
+ }
177
+ return { manifest, databasePath };
178
+ }
179
+ export function backupInstance(configPath, outputDirectory) {
180
+ const config = loadInstanceConfig(configPath);
181
+ const security = instanceConfigSecurity(configPath);
182
+ if (!security.ready)
183
+ throw new Error(security.error || "instance security preflight failed");
184
+ const source = databaseStatus(config.db_path);
185
+ if (source.integrity !== "ok")
186
+ throw new Error("source database failed quick_check");
187
+ if (source.schema_version < MIN_SUPPORTED_SCHEMA_VERSION || source.schema_version > CURRENT_SCHEMA_VERSION) {
188
+ throw new Error(`database schema ${source.schema_version} is outside the backup compatibility range`);
189
+ }
190
+ const output = resolve(outputDirectory);
191
+ if (existsSync(output))
192
+ throw new Error(`backup output already exists: ${output}`);
193
+ mkdirSync(output, { mode: 0o700 });
194
+ let complete = false;
195
+ try {
196
+ const databasePath = join(output, "wake-bridge.sqlite");
197
+ sqlite(["-batch", config.db_path], `VACUUM INTO ${sqlString(databasePath)};\n`);
198
+ chmodSync(databasePath, 0o600);
199
+ if (databaseStatus(databasePath).integrity !== "ok")
200
+ throw new Error("backup database failed quick_check");
201
+ const manifest = {
202
+ format_version: 1,
203
+ package_version: RELEASE_VERSION,
204
+ instance_id: config.instance_id,
205
+ owner_id: config.owner_id,
206
+ created_at: new Date().toISOString(),
207
+ source_schema_version: source.schema_version,
208
+ database_file: "wake-bridge.sqlite",
209
+ database_sha256: sha256(databasePath),
210
+ };
211
+ const manifestPath = join(output, "manifest.json");
212
+ writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, { encoding: "utf8", mode: 0o600, flag: "wx" });
213
+ chmodSync(manifestPath, 0o600);
214
+ complete = true;
215
+ return { ...manifest, backup_directory: output };
216
+ }
217
+ finally {
218
+ if (!complete)
219
+ rmSync(output, { recursive: true, force: true });
220
+ }
221
+ }
222
+ function replaceDatabase(dbPath, sourcePath) {
223
+ const destination = resolve(dbPath);
224
+ const temporary = join(dirname(destination), `.${basename(destination)}.${randomBytes(8).toString("hex")}.restore`);
225
+ copyFileSync(sourcePath, temporary);
226
+ let replaced = false;
227
+ try {
228
+ chmodSync(temporary, 0o600);
229
+ if (databaseStatus(temporary).integrity !== "ok")
230
+ throw new Error("restore candidate failed quick_check");
231
+ for (const suffix of ["-wal", "-shm"]) {
232
+ if (existsSync(`${destination}${suffix}`))
233
+ unlinkSync(`${destination}${suffix}`);
234
+ }
235
+ renameSync(temporary, destination);
236
+ replaced = true;
237
+ chmodSync(destination, 0o600);
238
+ }
239
+ finally {
240
+ if (!replaced && existsSync(temporary))
241
+ unlinkSync(temporary);
242
+ }
243
+ }
244
+ export function restoreInstance(options) {
245
+ if (!options.confirm_offline)
246
+ throw new Error("restore requires --confirm-offline after stopping the daemon");
247
+ const config = loadInstanceConfig(options.config_path);
248
+ if (options.confirm_instance_id !== config.instance_id)
249
+ throw new Error("restore instance confirmation does not match config");
250
+ const backup = readBackupManifest(options.backup_directory);
251
+ if (backup.manifest.instance_id !== config.instance_id || backup.manifest.owner_id !== config.owner_id) {
252
+ throw new Error("backup identity does not match the target Agent Space");
253
+ }
254
+ checkpointDatabase(config.db_path);
255
+ const rollback = backupInstance(options.config_path, options.rollback_output);
256
+ try {
257
+ replaceDatabase(config.db_path, backup.databasePath);
258
+ const restored = databaseStatus(config.db_path);
259
+ if (restored.integrity !== "ok")
260
+ throw new Error("restored database failed quick_check");
261
+ return { restored: true, schema_version: restored.schema_version, rollback_backup: rollback.backup_directory };
262
+ }
263
+ catch (error) {
264
+ const rollbackSource = readBackupManifest(rollback.backup_directory);
265
+ replaceDatabase(config.db_path, rollbackSource.databasePath);
266
+ throw error;
267
+ }
268
+ }
269
+ export function upgradeInstance(configPath, backupOutput, confirmOffline = false) {
270
+ const config = loadInstanceConfig(configPath);
271
+ const before = databaseStatus(config.db_path);
272
+ if (before.integrity !== "ok")
273
+ throw new Error("database failed quick_check; refusing upgrade");
274
+ if (before.schema_version === CURRENT_SCHEMA_VERSION) {
275
+ return { upgraded: false, from_schema: before.schema_version, to_schema: before.schema_version, backup_directory: null };
276
+ }
277
+ if (!confirmOffline)
278
+ throw new Error("schema upgrade requires --confirm-offline after stopping the daemon");
279
+ if (before.schema_version < MIN_SUPPORTED_SCHEMA_VERSION || before.schema_version > CURRENT_SCHEMA_VERSION) {
280
+ throw new Error(`database schema ${before.schema_version} cannot upgrade to ${CURRENT_SCHEMA_VERSION}`);
281
+ }
282
+ checkpointDatabase(config.db_path);
283
+ const backup = backupInstance(configPath, backupOutput);
284
+ try {
285
+ const bridge = new WakeBridge(config, {
286
+ autoMockTransport: false,
287
+ recoverDispatchLeases: false,
288
+ allowSchemaUpgrade: true,
289
+ });
290
+ bridge.close();
291
+ const after = databaseStatus(config.db_path);
292
+ if (after.schema_version !== CURRENT_SCHEMA_VERSION || after.integrity !== "ok") {
293
+ throw new Error("upgraded database failed schema or integrity verification");
294
+ }
295
+ return {
296
+ upgraded: true,
297
+ from_schema: before.schema_version,
298
+ to_schema: after.schema_version,
299
+ backup_directory: backup.backup_directory,
300
+ };
301
+ }
302
+ catch (error) {
303
+ const rollback = readBackupManifest(backup.backup_directory);
304
+ replaceDatabase(config.db_path, rollback.databasePath);
305
+ throw error;
306
+ }
307
+ }
308
+ function xml(value) {
309
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;")
310
+ .replaceAll('"', "&quot;").replaceAll("'", "&apos;");
311
+ }
312
+ function serviceLabel(instanceId) {
313
+ return `io.wakebridge.${instanceId.replaceAll(/[^A-Za-z0-9.-]/gu, "-")}`;
314
+ }
315
+ export function installMacLaunchAgent(options) {
316
+ if (process.platform !== "darwin")
317
+ throw new Error("the current release only ships a macOS LaunchAgent profile");
318
+ const configPath = realpathSync(resolve(options.config_path));
319
+ const config = loadInstanceConfig(configPath);
320
+ const preflight = releasePreflight(configPath);
321
+ if (!preflight.ok)
322
+ throw new Error(`release preflight failed; refusing service install: ${preflight.instance.error || preflight.instance.schema_state}`);
323
+ const port = options.port ?? 4311;
324
+ if (!Number.isSafeInteger(port) || port < 1 || port > 65_535)
325
+ throw new Error("LaunchAgent port must be an integer between 1 and 65535");
326
+ const label = serviceLabel(config.instance_id);
327
+ const launchAgents = resolve(options.launch_agents_directory ?? join(homedir(), "Library", "LaunchAgents"));
328
+ const logs = resolve(options.logs_directory ?? join(dirname(config.db_path), "logs"));
329
+ mkdirSync(launchAgents, { recursive: true, mode: 0o700 });
330
+ mkdirSync(logs, { recursive: true, mode: 0o700 });
331
+ const plistPath = join(launchAgents, `${label}.plist`);
332
+ if (existsSync(plistPath))
333
+ throw new Error(`LaunchAgent already exists: ${plistPath}`);
334
+ const cliPath = realpathSync(resolve(options.cli_path ?? process.argv[1]));
335
+ const contents = `<?xml version="1.0" encoding="UTF-8"?>
336
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
337
+ <plist version="1.0">
338
+ <dict>
339
+ <key>Label</key><string>${xml(label)}</string>
340
+ <key>ProgramArguments</key>
341
+ <array>
342
+ <string>${xml(process.execPath)}</string>
343
+ <string>${xml(cliPath)}</string>
344
+ <string>daemon</string>
345
+ <string>--config</string><string>${xml(configPath)}</string>
346
+ <string>--host</string><string>127.0.0.1</string>
347
+ <string>--port</string><string>${port}</string>
348
+ </array>
349
+ <key>RunAtLoad</key><true/>
350
+ <key>KeepAlive</key><true/>
351
+ <key>ProcessType</key><string>Background</string>
352
+ <key>StandardOutPath</key><string>${xml(join(logs, "daemon.stdout.log"))}</string>
353
+ <key>StandardErrorPath</key><string>${xml(join(logs, "daemon.stderr.log"))}</string>
354
+ </dict>
355
+ </plist>
356
+ `;
357
+ writeFileSync(plistPath, contents, { encoding: "utf8", mode: 0o600, flag: "wx" });
358
+ chmodSync(plistPath, 0o600);
359
+ const domain = `gui/${typeof process.getuid === "function" ? process.getuid() : "UID"}`;
360
+ return {
361
+ installed: true,
362
+ label,
363
+ plist_path: plistPath,
364
+ load_command: `launchctl bootstrap ${domain} ${plistPath}`,
365
+ unload_command: `launchctl bootout ${domain}/${label}`,
366
+ };
367
+ }
368
+ export function uninstallMacLaunchAgent(options) {
369
+ const config = loadInstanceConfig(options.config_path);
370
+ const label = serviceLabel(config.instance_id);
371
+ const launchAgents = resolve(options.launch_agents_directory ?? join(homedir(), "Library", "LaunchAgents"));
372
+ const plistPath = join(launchAgents, `${label}.plist`);
373
+ const removed = existsSync(plistPath);
374
+ if (removed)
375
+ unlinkSync(plistPath);
376
+ return { uninstalled: true, label, plist_path: plistPath, removed, data_preserved: true };
377
+ }
378
+ //# sourceMappingURL=release-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-lifecycle.js","sourceRoot":"","sources":["../../src/release-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Error raised by a public contract validator or SDK client. */
2
+ export declare class WakeBridgeSdkError extends Error {
3
+ readonly code: string;
4
+ readonly status: number;
5
+ constructor(message: string, code?: string, status?: number);
6
+ }