openmeld 0.3.185 → 0.3.187

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 (32) hide show
  1. package/dist/{add-me-membership-kEglOlMH.js → add-me-membership-5XQdTZ2M.js} +2 -2
  2. package/dist/{add-me-membership-kEglOlMH.js.map → add-me-membership-5XQdTZ2M.js.map} +1 -1
  3. package/dist/{api-client-foundation-7O3VJocF.js → api-client-foundation-CVX33-pv.js} +1 -1
  4. package/dist/{api-client-foundation-wW__rrcr.js → api-client-foundation-DUhsJ1iV.js} +2 -2
  5. package/dist/{api-client-foundation-wW__rrcr.js.map → api-client-foundation-DUhsJ1iV.js.map} +1 -1
  6. package/dist/{command-Bg1PSlmG.js → command-B_FdyvdH.js} +7 -7
  7. package/dist/{command-Bg1PSlmG.js.map → command-B_FdyvdH.js.map} +1 -1
  8. package/dist/{daemon-service-manager-CJK8FDmz.js → daemon-service-manager-DqIRLolx.js} +1 -1
  9. package/dist/{daemon-service-manager-9K3dv9dX.js → daemon-service-manager-T-A7pEXr.js} +3 -1
  10. package/dist/daemon-service-manager-T-A7pEXr.js.map +1 -0
  11. package/dist/{dist-DePUS7gW.js → dist-C9GguxOC.js} +20 -5
  12. package/dist/dist-C9GguxOC.js.map +1 -0
  13. package/dist/{dist-DlKBRYt4.js → dist-FbJD1l75.js} +1 -1
  14. package/dist/{elapsed-time-BeiTYXIX.js → elapsed-time-CgnNbeI7.js} +2 -2
  15. package/dist/{elapsed-time-BeiTYXIX.js.map → elapsed-time-CgnNbeI7.js.map} +1 -1
  16. package/dist/{installer-FZhbR-NM.js → installer-KA-d6KNE.js} +2 -2
  17. package/dist/{installer-FZhbR-NM.js.map → installer-KA-d6KNE.js.map} +1 -1
  18. package/dist/{openmeld-BdF3lNUo.js → openmeld-B74r25BK.js} +10 -10
  19. package/dist/{openmeld-BdF3lNUo.js.map → openmeld-B74r25BK.js.map} +1 -1
  20. package/dist/{openmeld-maintenance-worker-BajwpwJR.js → openmeld-maintenance-worker-LFc_VzeT.js} +3 -3
  21. package/dist/{openmeld-maintenance-worker-BajwpwJR.js.map → openmeld-maintenance-worker-LFc_VzeT.js.map} +1 -1
  22. package/dist/{openmeld-tools-update-coordinator-BjbxzbIB.js → openmeld-tools-update-coordinator-DbG0OANs.js} +44 -22
  23. package/dist/openmeld-tools-update-coordinator-DbG0OANs.js.map +1 -0
  24. package/dist/openmeld.js +3 -3
  25. package/dist/{upgrade-C6S4golR.js → upgrade-CHw5z465.js} +3 -3
  26. package/dist/{upgrade-C6S4golR.js.map → upgrade-CHw5z465.js.map} +1 -1
  27. package/dist/upgrade-DpJjQD5P.js +4 -0
  28. package/package.json +1 -1
  29. package/dist/daemon-service-manager-9K3dv9dX.js.map +0 -1
  30. package/dist/dist-DePUS7gW.js.map +0 -1
  31. package/dist/openmeld-tools-update-coordinator-BjbxzbIB.js.map +0 -1
  32. package/dist/upgrade-BH7yOfAS.js +0 -4
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { p as parseDaemonServiceEnvironmentFromDefinition } from "./daemon-service-manager-9K3dv9dX.js";
3
+ import { p as parseDaemonServiceEnvironmentFromDefinition } from "./daemon-service-manager-T-A7pEXr.js";
4
4
  export { parseDaemonServiceEnvironmentFromDefinition };
@@ -356,6 +356,8 @@ ${args}
356
356
  <true/>
357
357
  <key>KeepAlive</key>
358
358
  <true/>
359
+ <key>ProcessType</key>
360
+ <string>Interactive</string>
359
361
  <key>ThrottleInterval</key>
360
362
  <integer>${DAEMON_SERVICE_RESTART_BACKOFF_SECONDS}</integer>
361
363
  <key>EnvironmentVariables</key>
@@ -1220,4 +1222,4 @@ async function resolveUnguardedDaemonServiceManager(controller, pathInput = {})
1220
1222
  //#endregion
1221
1223
  export { resolveDaemonServiceIdentity as C, isTestProcess as D, isPublishedProductionOpenMeldRoot as E, waitForLaunchdJobUnloaded as S, assertSafePublishedProductionServiceRegistrationMutation as T, readSystemdServiceActiveProbe as _, disableDaemonServiceAutostartIfConfigured as a, resolveDaemonServiceManager as b, getDaemonSystemServiceLogPath as c, isDaemonServiceBackgroundExecutionBlocked as d, isDaemonServiceJobNeverSpawned as f, readDaemonServiceJobCrashExitCode as g, parseLaunchdServiceJobDiagnostics as h, buildSystemdUnitFile as i, guardDaemonServiceManagerMutations as l, parseDaemonServiceEnvironmentTargetFromDefinition as m, assertServiceManagerProbeSucceeded as n, formatDaemonServiceJobDiagnosticsEvidence as o, parseDaemonServiceEnvironmentFromDefinition as p, buildLaunchdPlist as r, getDaemonServiceLaunchdLabel as s, DaemonServiceWaitTimeoutError as t, installMissingServiceDefinitionFailAtomically as u, readSystemdServiceEnabledProbe as v, assertNoPublishedProductionMutationDuringTests as w, runServiceDefinitionRollbackSteps as x, readWindowsRunnerCommandSummary as y };
1222
1224
 
1223
- //# sourceMappingURL=daemon-service-manager-9K3dv9dX.js.map
1225
+ //# sourceMappingURL=daemon-service-manager-T-A7pEXr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-service-manager-T-A7pEXr.js","names":[],"sources":["../src/config/published-production-safety.ts","../src/local-service/lifecycle/daemon-service-identity.ts","../src/local-service/lifecycle/daemon-service-manager.ts"],"sourcesContent":["import { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport type { OpenMeldPathResolutionInput } from \"./paths\";\nimport {\n resolveDefaultOpenMeldHomeDirname,\n resolveExplicitOpenMeldEnvPreset,\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n} from \"./paths\";\n\nconst PUBLISHED_PRODUCTION_OPENMELD_ROOT = normalizeComparablePath(\n join(homedir(), resolveDefaultOpenMeldHomeDirname(\"prod\"))\n);\n\nexport function assertNoPublishedProductionMutationDuringTests(\n pathInput: OpenMeldPathResolutionInput,\n targetName: string\n): void {\n if (!isTestProcess(pathInput)) {\n return;\n }\n if (!isPublishedProductionOpenMeldRoot(pathInput)) {\n return;\n }\n throw new Error(\n [\n `Refusing to mutate ${targetName} in the published production lane during tests.`,\n \"Set OPENMELD_HOME to a fresh temporary directory, or run the validation through openmeld-dev or openmeld-canary.\",\n ].join(\" \")\n );\n}\n\n/**\n * The OS service manager registration (launchd label / systemd unit / Windows\n * service name) is a per-user global resource keyed only by the env preset.\n * OPENMELD_HOME isolates lane files but does NOT isolate this registration, so\n * a process with an isolated root can still stop, boot out, or uninstall the\n * real published production service. Fail closed before any such mutation:\n * - test processes must never mutate the production registration, and\n * - a non-test process whose effective root left the published production\n * lane must state its intent with an explicit OPENMELD_ENV_PRESET.\n */\nexport function assertSafePublishedProductionServiceRegistrationMutation(\n operation: string,\n pathInput: OpenMeldPathResolutionInput = {}\n): void {\n if (resolveOpenMeldEnvPreset(pathInput) !== \"prod\") {\n return;\n }\n if (isTestProcess(pathInput)) {\n throw new Error(\n [\n `Refusing to ${operation} the published production OpenMeld Service registration during tests.`,\n \"OPENMELD_HOME does not isolate the OS service manager registration.\",\n \"Target an isolated lane with OPENMELD_ENV_PRESET=dev-local or OPENMELD_ENV_PRESET=canary, or stub the service manager.\",\n ].join(\" \")\n );\n }\n if (resolveExplicitOpenMeldEnvPreset(pathInput) === \"prod\") {\n return;\n }\n if (isPublishedProductionOpenMeldRoot(pathInput)) {\n return;\n }\n throw new Error(\n [\n `Refusing to ${operation} the published production OpenMeld Service registration:`,\n \"the effective OpenMeld root is outside the published production lane, but the service identity resolved to the production label.\",\n \"Set OPENMELD_ENV_PRESET explicitly to state which service registration this command must mutate.\",\n ].join(\" \")\n );\n}\n\nexport function isPublishedProductionOpenMeldRoot(\n pathInput: OpenMeldPathResolutionInput\n): boolean {\n return (\n normalizeComparablePath(resolveOpenMeldRootDir(pathInput)) ===\n PUBLISHED_PRODUCTION_OPENMELD_ROOT\n );\n}\n\nexport function isTestProcess(\n pathInput: OpenMeldPathResolutionInput = {}\n): boolean {\n const env = pathInput.env ?? process.env;\n const argv = pathInput.argv ?? process.argv;\n return (\n env.NODE_ENV === \"test\" ||\n env.VITEST === \"true\" ||\n typeof env.VITEST_WORKER_ID === \"string\" ||\n typeof env.JEST_WORKER_ID === \"string\" ||\n argv.some((arg) => arg.includes(\"vitest\"))\n );\n}\n\nfunction normalizeComparablePath(path: string): string {\n const normalized = resolve(path);\n return process.platform === \"win32\" ? normalized.toLowerCase() : normalized;\n}\n","import type {\n OpenMeldEnvPreset,\n OpenMeldPathResolutionInput,\n} from \"../../config/paths\";\nimport {\n resolveOpenMeldEnvPreset,\n resolveOpenMeldServiceScope,\n} from \"../../config/paths\";\n\nexport type DaemonServiceIdentity = {\n envPreset: OpenMeldEnvPreset;\n serviceName: string;\n launchdLabel: string;\n windowsServiceName: string;\n windowsDisplayName: string;\n cliEntryAliases: readonly string[];\n};\n\nconst DAEMON_SERVICE_IDENTITY_BY_PRESET = {\n prod: {\n envPreset: \"prod\",\n serviceName: \"openmeld-daemon\",\n launchdLabel: \"com.openmeld.openmeld-background-service\",\n windowsServiceName: \"OpenMeld-Daemon\",\n windowsDisplayName: \"OpenMeld Daemon Service\",\n cliEntryAliases: [\"openmeld\"],\n },\n \"dev-local\": {\n envPreset: \"dev-local\",\n serviceName: \"openmeld-daemon-dev-local\",\n launchdLabel: \"com.openmeld.openmeld-background-service.dev-local\",\n windowsServiceName: \"OpenMeld-Daemon-DevLocal\",\n windowsDisplayName: \"OpenMeld Daemon Service (Dev Local)\",\n cliEntryAliases: [\"openmeld-dev\"],\n },\n canary: {\n envPreset: \"canary\",\n serviceName: \"openmeld-daemon-canary\",\n launchdLabel: \"com.openmeld.openmeld-background-service.canary\",\n windowsServiceName: \"OpenMeld-Daemon-Canary\",\n windowsDisplayName: \"OpenMeld Daemon Service (Canary)\",\n cliEntryAliases: [\"openmeld-canary\"],\n },\n} as const satisfies Record<OpenMeldEnvPreset, DaemonServiceIdentity>;\n\nexport function resolveDaemonServiceIdentity(\n input: OpenMeldPathResolutionInput = {}\n): DaemonServiceIdentity {\n const preset = resolveOpenMeldEnvPreset(input);\n const identity = DAEMON_SERVICE_IDENTITY_BY_PRESET[preset];\n const scope = resolveOpenMeldServiceScope(input);\n return scope\n ? {\n ...identity,\n serviceName: `${identity.serviceName}-${scope}`,\n launchdLabel: `${identity.launchdLabel}.${scope}`,\n windowsServiceName: `${identity.windowsServiceName}-${scope}`,\n windowsDisplayName: `${identity.windowsDisplayName} (${scope})`,\n }\n : identity;\n}\n","import { spawn } from \"node:child_process\";\nimport { constants } from \"node:fs\";\nimport {\n access,\n chmod,\n mkdir,\n readFile,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { userInfo } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type { WindowsUserTaskRequest } from \"@openmeld/schemas\";\nimport { sleep } from \"@openmeld/utils\";\nimport type { DaemonServiceController } from \"../../config/daemon-state\";\nimport { daemonRuntimeRootPath } from \"../../config/daemon-state\";\nimport type { OpenMeldEnvironmentTarget } from \"../../config/openmeld-environment-target\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport {\n resolveOpenMeldEnvPreset,\n resolveOpenMeldRootDir,\n} from \"../../config/paths\";\nimport { assertSafePublishedProductionServiceRegistrationMutation } from \"../../config/published-production-safety\";\nimport { resolveDaemonServiceIdentity } from \"./daemon-service-identity\";\nimport {\n readWindowsTaskAction,\n runWindowsUserTask,\n windowsPowerShellPath,\n windowsTaskActionArguments,\n} from \"./windows-user-task\";\n\nexport type RunCommandResult = {\n exitCode: number;\n stdout: string;\n stderr: string;\n};\n\ntype RunCommandOptions = {\n args: string[];\n command: string;\n env?: NodeJS.ProcessEnv;\n throwOnError?: boolean;\n};\n\nexport type DaemonServiceCommandSpec = {\n executable: string;\n args: string[];\n env: Record<string, string>;\n workingDirectory?: string;\n};\n\nexport type DaemonServiceManagerRuntimeStatus = {\n installed: boolean;\n running: boolean;\n enabled: boolean;\n definitionPath?: string | null;\n commandSummary?: string | null;\n /** Native launch action when the supervisor does not use a definition file. */\n commandSpec?: DaemonServiceCommandSpec;\n /**\n * The OpenMeld backend target persisted in the OS service definition.\n * `undefined` is reserved for older/custom manager implementations that do\n * not expose this observation; `null` means the definition was readable but\n * did not contain one complete, valid target.\n */\n environmentTarget?: OpenMeldEnvironmentTarget | null;\n};\n\nexport type DaemonServiceJobDiagnostics = {\n controller: DaemonServiceController;\n /** The service definition is loaded in the OS service manager domain. */\n loaded: boolean;\n /** How many times the OS service manager spawned the process since load. */\n runs: number | null;\n state: string | null;\n /** Raw last-exit text as reported, e.g. \"(never exited)\" or \"78\". */\n lastExitCodeText: string | null;\n /** Numeric last exit code when the raw text is a plain integer. */\n lastExitCode: number | null;\n /** launchd marker for a spawn held back by the OS (Background Task Management). */\n pendedNondemandSpawn: string | null;\n /** Job is configured to auto-start and stay alive (keepalive + runatload). */\n keepaliveRunAtLoad: boolean;\n};\n\nexport type DaemonServiceManager = {\n controller: DaemonServiceController;\n /**\n * Installs or refreshes the supervisor definition without starting another\n * process. When the definition was absent, success means a fresh status\n * probe confirmed that it is installed and enabled. A failed install or\n * verification removes that newly created definition before rejecting.\n */\n install: (spec: DaemonServiceCommandSpec) => Promise<void>;\n uninstall: () => Promise<void>;\n enableAutostart: () => Promise<void>;\n disableAutostart: () => Promise<void>;\n start: () => Promise<void>;\n stop: () => Promise<void>;\n deactivate: () => Promise<void>;\n status: () => Promise<DaemonServiceManagerRuntimeStatus>;\n waitUntilAbsent: () => Promise<void>;\n waitUntilStopped: () => Promise<void>;\n waitUntilRunning: () => Promise<void>;\n /**\n * Controller-reported job-state evidence for startup failure diagnosis\n * (for launchd: `launchctl print` runs/state/last exit code/pended spawn).\n * Diagnostic evidence only; it must never feed availability, readiness,\n * or lifecycle decisions. Resolves null when the controller offers no\n * job-state evidence or the probe fails.\n */\n readJobDiagnostics?: () => Promise<DaemonServiceJobDiagnostics | null>;\n};\n\n/**\n * Disables autostart only when the OS definition is already committed.\n * Setup can run a candidate Service from its stable carrier before that\n * definition exists; the process can still be stopped without toggling it.\n */\nexport async function disableDaemonServiceAutostartIfConfigured(input: {\n manager: DaemonServiceManager;\n status: DaemonServiceManagerRuntimeStatus | null;\n}): Promise<boolean> {\n if (!(input.status?.installed === true && input.status.enabled === true)) {\n return false;\n }\n await input.manager.disableAutostart();\n return true;\n}\n\nconst SHELL_QUOTING_PATTERN = /[\\s\"\\\\]/g;\nconst SHELL_BACKSLASH_PATTERN = /\\\\/g;\nconst SHELL_DOUBLE_QUOTE_PATTERN = /\"/g;\nconst WINDOWS_QUOTE_PATTERN = /\"/g;\nconst XML_AMPERSAND_PATTERN = /&/g;\nconst XML_LESS_THAN_PATTERN = /</g;\nconst XML_GREATER_THAN_PATTERN = />/g;\nconst XML_DOUBLE_QUOTE_ESCAPE_PATTERN = /\"/g;\nconst XML_SINGLE_QUOTE_PATTERN = /'/g;\nconst LAUNCHD_ENABLED_PATTERN = /enabled\\s*=\\s*(true|false)/i;\nconst LAUNCHD_STATE_PATTERN = /state\\s*=\\s*running/i;\nconst LAUNCHD_DISABLED_SERVICES_ENTRY_PATTERN =\n /\"([^\"]+)\"\\s*=>\\s*(enabled|disabled)/i;\nconst LAUNCHD_STRING_PATTERN = /<string>([^<]+)<\\/string>/g;\nconst LAUNCHD_ENVIRONMENT_BLOCK_PATTERN =\n /<key>EnvironmentVariables<\\/key>\\s*<dict>([\\s\\S]*?)<\\/dict>/;\nconst WINDOWS_LINE_SEPARATOR_PATTERN = /\\r?\\n/;\nconst WINDOWS_ENVIRONMENT_ASSIGNMENT_PATTERN = /^set \"([^=]+)=(.*)\"$/i;\nconst SYSTEMD_ACTIVE_STATES = new Set([\n \"active\",\n \"reloading\",\n \"inactive\",\n \"failed\",\n \"activating\",\n \"deactivating\",\n \"maintenance\",\n \"unknown\",\n]);\nconst SYSTEMD_ENABLED_STATES = new Set([\n \"enabled\",\n \"enabled-runtime\",\n \"linked\",\n \"linked-runtime\",\n \"alias\",\n \"masked\",\n \"masked-runtime\",\n \"static\",\n \"indirect\",\n \"generated\",\n \"transient\",\n \"disabled\",\n \"bad\",\n \"not-found\",\n]);\nconst LAUNCHD_ALREADY_PATTERN = /already/i;\nconst WINDOWS_SCRIPT_LINE_SPLIT_PATTERN = /\\r?\\n/u;\nconst LAUNCHD_SERVICE_NOT_FOUND_PATTERNS = [\n /could not find service/i,\n /service could not be found/i,\n /could not find domain/i,\n] as const;\nconst LAUNCHD_PRINT_RUNS_PATTERN = /^\\s*runs\\s*=\\s*(\\d+)\\s*$/m;\nconst LAUNCHD_PRINT_STATE_PATTERN = /^\\s*state\\s*=\\s*(.+?)\\s*$/m;\nconst LAUNCHD_PRINT_LAST_EXIT_CODE_PATTERN =\n /^\\s*last exit code\\s*=\\s*(.+?)\\s*$/m;\nconst LAUNCHD_PRINT_PENDED_NONDEMAND_SPAWN_PATTERN =\n /^\\s*pended nondemand spawn\\s*=\\s*(.+?)\\s*$/m;\nconst LAUNCHD_PRINT_PROPERTIES_PATTERN = /^\\s*properties\\s*=\\s*(.+?)\\s*$/m;\nconst LAUNCHD_PROPERTIES_KEEPALIVE_PATTERN = /\\bkeepalive\\b/i;\nconst LAUNCHD_PROPERTIES_RUNATLOAD_PATTERN = /\\brunatload\\b/i;\nconst INTEGER_TEXT_PATTERN = /^-?\\d+$/;\nconst SYSTEM_SERVICE_WAIT_MS = 15_000;\nconst SYSTEM_SERVICE_POLL_MS = 200;\n\nconst QUOTED_XML_REPLACEMENT = \"&quot;\";\nconst APOSTROPHE_XML_REPLACEMENT = \"&apos;\";\nconst GREATER_XML_REPLACEMENT = \"&gt;\";\nconst LESS_XML_REPLACEMENT = \"&lt;\";\nconst AMPERSAND_XML_REPLACEMENT = \"&amp;\";\n\nexport function getDaemonSystemServiceLogPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return join(\n daemonRuntimeRootPath(pathInput),\n \"logs\",\n \"daemon-system-service.log\"\n );\n}\n\nexport function getDaemonServiceLaunchdLabel(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n return resolveDaemonServiceIdentity(pathInput).launchdLabel;\n}\n\nconst SYSTEMD_CONTROLLER: DaemonServiceController = \"systemd\";\nconst LAUNCHD_CONTROLLER: DaemonServiceController = \"launchd\";\nconst WINDOWS_CONTROLLER: DaemonServiceController = \"windows-service\";\nconst DAEMON_SERVICE_RESTART_BACKOFF_SECONDS = 60;\n\nasync function runCommand(input: RunCommandOptions): Promise<RunCommandResult> {\n return await new Promise((resolve, reject) => {\n const child = spawn(input.command, input.args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: input.env ?? process.env,\n windowsHide: true,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n child.stdout?.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr?.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n\n child.once(\"error\", (error) => {\n if (input.throwOnError) {\n reject(error);\n return;\n }\n resolve({\n exitCode: 1,\n stdout,\n stderr: `${stderr}${String(error)}`,\n });\n });\n\n child.once(\"close\", (code) => {\n const exitCode = typeof code === \"number\" ? code : 1;\n if (input.throwOnError && exitCode !== 0) {\n reject(\n new Error(\n [\n `command failed: ${input.command} ${input.args.join(\" \")}`,\n stdout.trim(),\n stderr.trim(),\n ]\n .filter(Boolean)\n .join(\" | \")\n )\n );\n return;\n }\n resolve({\n exitCode,\n stdout,\n stderr,\n });\n });\n });\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path, constants.F_OK);\n return true;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return false;\n }\n throw error;\n }\n}\n\n// Thrown when a service-manager wait (running/stopped/absent) times out. On the\n// launchd running path it carries the structured launchd job-state verdict so\n// upstream lifecycle journaling can distinguish a never-spawned (Login Items\n// blocked) job from a crash loop — matching the `openmeld service run` startup path.\n// Diagnostic evidence only: jobDiagnostics must never gate lifecycle decisions.\nexport class DaemonServiceWaitTimeoutError extends Error {\n readonly jobDiagnostics: DaemonServiceJobDiagnostics | null;\n\n constructor(input: {\n message: string;\n jobDiagnostics?: DaemonServiceJobDiagnostics | null;\n }) {\n super(input.message);\n this.name = \"DaemonServiceWaitTimeoutError\";\n this.jobDiagnostics = input.jobDiagnostics ?? null;\n }\n}\n\nexport function isDaemonServiceWaitTimeoutError(\n error: unknown\n): error is DaemonServiceWaitTimeoutError {\n return error instanceof DaemonServiceWaitTimeoutError;\n}\n\nfunction buildSystemServiceWaitTimeoutError(input: {\n action: \"absent\" | \"running\" | \"stopped\";\n controller: DaemonServiceController;\n details?: string | null;\n jobDiagnostics?: DaemonServiceJobDiagnostics | null;\n}): DaemonServiceWaitTimeoutError {\n const detailSuffix =\n input.details && input.details.trim().length > 0\n ? ` Last observed state: ${input.details.trim()}`\n : \"\";\n return new DaemonServiceWaitTimeoutError({\n message: `timed out waiting for ${input.controller} service to become ${input.action}.${detailSuffix}`,\n jobDiagnostics: input.jobDiagnostics ?? null,\n });\n}\n\nasync function waitForCondition(input: {\n waitMs?: number;\n pollMs?: number;\n until: () => Promise<boolean>;\n onTimeout: () => Promise<Error> | Error;\n}): Promise<void> {\n const deadline = Date.now() + (input.waitMs ?? SYSTEM_SERVICE_WAIT_MS);\n const pollMs = input.pollMs ?? SYSTEM_SERVICE_POLL_MS;\n while (Date.now() < deadline) {\n if (await input.until()) {\n return;\n }\n await sleep(pollMs);\n }\n throw await input.onTimeout();\n}\n\nfunction isLaunchdServiceMissing(result: RunCommandResult): boolean {\n if (result.exitCode === 0) {\n return false;\n }\n const output = `${result.stdout}\\n${result.stderr}`;\n return LAUNCHD_SERVICE_NOT_FOUND_PATTERNS.some((pattern) =>\n pattern.test(output)\n );\n}\n\nexport async function waitForLaunchdJobUnloaded(\n serviceKey: string\n): Promise<void> {\n await waitForCondition({\n until: async () => {\n const result = await runCommand({\n command: \"launchctl\",\n args: [\"print\", serviceKey],\n throwOnError: false,\n });\n if (result.exitCode !== 0 && !isLaunchdServiceMissing(result)) {\n throw buildServiceManagerProbeError(\"launchctl print\", result);\n }\n return isLaunchdServiceMissing(result);\n },\n onTimeout: () =>\n new Error(`Timed out waiting for launchd job ${serviceKey} to unload.`),\n });\n}\n\nfunction formatManagerStatusDetails(\n status: DaemonServiceManagerRuntimeStatus\n): string {\n return `installed=${String(status.installed)} running=${String(status.running)} enabled=${String(status.enabled)}`;\n}\n\nfunction quoteShellValue(input: string): string {\n if (input === \"\") {\n return '\"\"';\n }\n if (SHELL_QUOTING_PATTERN.test(input)) {\n return `\"${input\n .replace(SHELL_BACKSLASH_PATTERN, \"\\\\\\\\\")\n .replace(SHELL_DOUBLE_QUOTE_PATTERN, '\\\\\"')}\"`;\n }\n return input;\n}\n\nfunction quoteWindowsArg(input: string): string {\n return `\"${input.replace(WINDOWS_QUOTE_PATTERN, '\\\\\"')}\"`;\n}\n\nfunction escapeXmlText(input: string): string {\n return input\n .replace(XML_AMPERSAND_PATTERN, AMPERSAND_XML_REPLACEMENT)\n .replace(XML_LESS_THAN_PATTERN, LESS_XML_REPLACEMENT)\n .replace(XML_GREATER_THAN_PATTERN, GREATER_XML_REPLACEMENT)\n .replace(XML_DOUBLE_QUOTE_ESCAPE_PATTERN, QUOTED_XML_REPLACEMENT)\n .replace(XML_SINGLE_QUOTE_PATTERN, APOSTROPHE_XML_REPLACEMENT);\n}\n\nexport function buildSystemdUnitFile(\n spec: DaemonServiceCommandSpec,\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const serviceLogPath = getDaemonSystemServiceLogPath(pathInput);\n const command = [\n quoteShellValue(spec.executable),\n ...spec.args.map(quoteShellValue),\n ].join(\" \");\n const workingDirectory = quoteShellValue(\n spec.workingDirectory ?? daemonRuntimeRootPath(pathInput)\n );\n const envRows = Object.entries(spec.env).map(\n ([key, value]) =>\n `Environment=${key}=${quoteSystemdEnvironmentValue(value)}`\n );\n return `# Managed by OpenMeld CLI\n[Unit]\nDescription=OpenMeld Daemon Service\nAfter=network-online.target\n\n[Service]\nType=simple\nWorkingDirectory=${workingDirectory}\nExecStart=${command}\nRestart=always\nRestartSec=${DAEMON_SERVICE_RESTART_BACKOFF_SECONDS}\n${envRows.join(\"\\n\")}\nStandardOutput=append:${serviceLogPath}\nStandardError=append:${serviceLogPath}\n\n[Install]\nWantedBy=default.target\n`;\n}\n\nfunction quoteSystemdEnvironmentValue(value: string): string {\n return `\"${value\n .replace(SHELL_BACKSLASH_PATTERN, \"\\\\\\\\\")\n .replace(SHELL_DOUBLE_QUOTE_PATTERN, '\\\\\"')}\"`;\n}\n\nfunction sanitizeLaunchdEnvironmentValue(value: string): string {\n return sanitizeControlCharacters(value);\n}\n\nfunction sanitizeControlCharacters(value: string): string {\n let sanitized = \"\";\n for (const char of value) {\n const code = char.codePointAt(0);\n if (code === undefined) {\n continue;\n }\n if (code >= 0x00 && code <= 0x1f) {\n continue;\n }\n if (code === 0x7f) {\n continue;\n }\n sanitized += char;\n }\n return sanitized;\n}\n\nexport function buildLaunchdPlist(\n spec: DaemonServiceCommandSpec,\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const serviceIdentity = resolveDaemonServiceIdentity(pathInput);\n const serviceLogPath = getDaemonSystemServiceLogPath(pathInput);\n const args = [spec.executable, ...spec.args]\n .map((value) => ` <string>${escapeXmlText(value)}</string>`)\n .join(\"\\n\");\n const workingDirectory = escapeXmlText(\n sanitizeLaunchdEnvironmentValue(\n spec.workingDirectory ?? daemonRuntimeRootPath(pathInput)\n )\n );\n const envRows = Object.entries(spec.env)\n .filter(([key, value]) => key.trim() !== \"\" && value !== \"\")\n .map(\n ([key, value]) =>\n ` <key>${escapeXmlText(key)}</key>\\n <string>${escapeXmlText(\n sanitizeLaunchdEnvironmentValue(value)\n )}</string>`\n )\n .join(\"\\n\");\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${serviceIdentity.launchdLabel}</string>\n <key>ProgramArguments</key>\n <array>\n${args}\n </array>\n <key>WorkingDirectory</key>\n <string>${workingDirectory}</string>\n <key>RunAtLoad</key>\n <true/>\n <key>KeepAlive</key>\n <true/>\n <key>ProcessType</key>\n <string>Interactive</string>\n <key>ThrottleInterval</key>\n <integer>${DAEMON_SERVICE_RESTART_BACKOFF_SECONDS}</integer>\n <key>EnvironmentVariables</key>\n <dict>\n${envRows}\n </dict>\n <key>StandardOutPath</key>\n <string>${serviceLogPath}</string>\n <key>StandardErrorPath</key>\n <string>${serviceLogPath}</string>\n</dict>\n</plist>\n`;\n}\n\nfunction resolveSystemdUnitPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const serviceIdentity = resolveDaemonServiceIdentity(pathInput);\n return join(\n userInfo().homedir,\n \".config\",\n \"systemd\",\n \"user\",\n `${serviceIdentity.serviceName}.service`\n );\n}\n\nfunction resolveLaunchdPlistPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const serviceIdentity = resolveDaemonServiceIdentity(pathInput);\n return join(\n userInfo().homedir,\n \"Library\",\n \"LaunchAgents\",\n `${serviceIdentity.launchdLabel}.plist`\n );\n}\n\nfunction resolveWindowsServiceScriptPath(\n pathInput: OpenMeldPathResolutionInput = {}\n): string {\n const serviceIdentity = resolveDaemonServiceIdentity(pathInput);\n return join(\n daemonRuntimeRootPath(pathInput),\n `${serviceIdentity.serviceName}-runner.bat`\n );\n}\n\nfunction parseRegexGroup(input: string, pattern: RegExp): string | null {\n const match = input.match(pattern);\n return match?.[1] ?? null;\n}\n\nfunction parseLaunchdEnabled(output: string): boolean {\n const value = parseRegexGroup(output, LAUNCHD_ENABLED_PATTERN);\n return value !== null && value.toLowerCase() === \"true\";\n}\n\nexport function parseLaunchdServiceJobDiagnostics(\n printOutput: string\n): DaemonServiceJobDiagnostics {\n const runsText = parseRegexGroup(printOutput, LAUNCHD_PRINT_RUNS_PATTERN);\n const lastExitCodeText = parseRegexGroup(\n printOutput,\n LAUNCHD_PRINT_LAST_EXIT_CODE_PATTERN\n );\n const propertiesText = parseRegexGroup(\n printOutput,\n LAUNCHD_PRINT_PROPERTIES_PATTERN\n );\n return {\n controller: LAUNCHD_CONTROLLER,\n loaded: true,\n runs: runsText === null ? null : Number.parseInt(runsText, 10),\n state: parseRegexGroup(printOutput, LAUNCHD_PRINT_STATE_PATTERN),\n lastExitCodeText,\n lastExitCode:\n lastExitCodeText !== null && INTEGER_TEXT_PATTERN.test(lastExitCodeText)\n ? Number.parseInt(lastExitCodeText, 10)\n : null,\n pendedNondemandSpawn: parseRegexGroup(\n printOutput,\n LAUNCHD_PRINT_PENDED_NONDEMAND_SPAWN_PATTERN\n ),\n keepaliveRunAtLoad:\n propertiesText !== null &&\n LAUNCHD_PROPERTIES_KEEPALIVE_PATTERN.test(propertiesText) &&\n LAUNCHD_PROPERTIES_RUNATLOAD_PATTERN.test(propertiesText),\n };\n}\n\nexport function isDaemonServiceJobNeverSpawned(\n diagnostics: DaemonServiceJobDiagnostics\n): boolean {\n return (\n diagnostics.loaded &&\n diagnostics.runs === 0 &&\n diagnostics.keepaliveRunAtLoad\n );\n}\n\nexport function isDaemonServiceBackgroundExecutionBlocked(\n diagnostics: DaemonServiceJobDiagnostics\n): boolean {\n return (\n diagnostics.controller === LAUNCHD_CONTROLLER &&\n isDaemonServiceJobNeverSpawned(diagnostics) &&\n diagnostics.pendedNondemandSpawn !== null\n );\n}\n\nexport function readDaemonServiceJobCrashExitCode(\n diagnostics: DaemonServiceJobDiagnostics\n): number | null {\n if (!diagnostics.loaded) {\n return null;\n }\n if (diagnostics.runs === null || diagnostics.runs <= 0) {\n return null;\n }\n if (diagnostics.lastExitCode === null || diagnostics.lastExitCode === 0) {\n return null;\n }\n return diagnostics.lastExitCode;\n}\n\nexport function formatDaemonServiceJobDiagnosticsEvidence(\n diagnostics: DaemonServiceJobDiagnostics\n): string {\n if (!diagnostics.loaded) {\n return `${diagnostics.controller} job: not loaded`;\n }\n const parts = [\n `state=${diagnostics.state ?? \"unknown\"}`,\n `runs=${diagnostics.runs ?? \"unknown\"}`,\n `last exit code=${diagnostics.lastExitCodeText ?? \"unknown\"}`,\n ...(diagnostics.pendedNondemandSpawn\n ? [`pended nondemand spawn=${diagnostics.pendedNondemandSpawn}`]\n : []),\n ...(diagnostics.keepaliveRunAtLoad\n ? [\"properties=keepalive|runatload\"]\n : []),\n ];\n return `${diagnostics.controller} job: ${parts.join(\", \")}`;\n}\n\nfunction parseLaunchdEnabledFromDisabledServices(\n output: string,\n label: string\n): boolean | null {\n const lines = output.split(\"\\n\");\n for (const line of lines) {\n const match = line.match(LAUNCHD_DISABLED_SERVICES_ENTRY_PATTERN);\n if (!match) {\n continue;\n }\n const serviceLabel = match[1];\n const state = match[2];\n if (!(serviceLabel && state) || serviceLabel !== label) {\n continue;\n }\n return state.toLowerCase() === \"enabled\";\n }\n return null;\n}\n\nexport async function installMissingServiceDefinitionFailAtomically(input: {\n definitionWasPresent: boolean;\n install: () => Promise<void>;\n rollbackNewDefinition: () => Promise<void>;\n verifyNewDefinition: () => Promise<void>;\n}): Promise<void> {\n try {\n await input.install();\n await input.verifyNewDefinition();\n } catch (installError) {\n if (input.definitionWasPresent) {\n throw installError;\n }\n try {\n await input.rollbackNewDefinition();\n } catch (rollbackError) {\n throw new AggregateError(\n [installError, rollbackError],\n \"service registration install failed and its new definition could not be rolled back\"\n );\n }\n throw installError;\n }\n}\n\nexport function readSystemdServiceActiveProbe(\n result: RunCommandResult\n): boolean {\n const state = result.stdout.trim().toLowerCase();\n if (!SYSTEMD_ACTIVE_STATES.has(state)) {\n throw buildServiceManagerProbeError(\"systemctl is-active\", result);\n }\n return state === \"active\" || state === \"reloading\";\n}\n\nexport function readSystemdServiceEnabledProbe(\n result: RunCommandResult\n): boolean {\n const state = result.stdout.trim().toLowerCase();\n if (!SYSTEMD_ENABLED_STATES.has(state)) {\n throw buildServiceManagerProbeError(\"systemctl is-enabled\", result);\n }\n return state === \"enabled\" || state === \"enabled-runtime\";\n}\n\nexport function assertServiceManagerProbeSucceeded(\n probe: string,\n result: RunCommandResult\n): void {\n if (result.exitCode !== 0) {\n throw buildServiceManagerProbeError(probe, result);\n }\n}\n\nfunction buildServiceManagerProbeError(\n probe: string,\n result: RunCommandResult\n): Error {\n return new Error(\n [\n `${probe} probe failed`,\n `exitCode=${result.exitCode}`,\n result.stdout.trim(),\n result.stderr.trim(),\n ]\n .filter(Boolean)\n .join(\" | \")\n );\n}\n\nexport async function runServiceDefinitionRollbackSteps(\n steps: ReadonlyArray<() => Promise<unknown>>\n): Promise<void> {\n const errors: unknown[] = [];\n for (const step of steps) {\n try {\n await step();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length > 0) {\n throw new AggregateError(\n errors,\n \"one or more service registration rollback steps failed\"\n );\n }\n}\n\nfunction assertServiceRegistrationInstalledAndEnabled(\n controller: DaemonServiceController,\n status: DaemonServiceManagerRuntimeStatus\n): void {\n if (status.installed && status.enabled) {\n return;\n }\n throw new Error(\n `${controller} service registration install did not restore an installed, enabled registration`\n );\n}\n\nfunction buildSystemdManager(\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonServiceManager {\n const serviceIdentity = resolveDaemonServiceIdentity(pathInput);\n const unitPath = resolveSystemdUnitPath(pathInput);\n const unitName = `${serviceIdentity.serviceName}.service`;\n\n return {\n controller: SYSTEMD_CONTROLLER,\n install: async (spec) => {\n const definitionWasPresent = await pathExists(unitPath);\n await installMissingServiceDefinitionFailAtomically({\n definitionWasPresent,\n install: async () => {\n await ensureServiceLogDirectory(pathInput);\n await mkdir(dirname(unitPath), { recursive: true });\n await writeFile(unitPath, buildSystemdUnitFile(spec, pathInput), {\n encoding: \"utf8\",\n mode: 0o600,\n });\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"daemon-reload\"],\n throwOnError: true,\n });\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"enable\", unitName],\n throwOnError: true,\n });\n const user = process.env.USER || userInfo().username;\n await runCommand({\n command: \"loginctl\",\n args: [\"enable-linger\", user],\n throwOnError: false,\n });\n },\n rollbackNewDefinition: async () => {\n await runServiceDefinitionRollbackSteps([\n async () =>\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"disable\", unitName],\n throwOnError: true,\n }),\n async () => await rm(unitPath, { force: true }),\n async () =>\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"daemon-reload\"],\n throwOnError: true,\n }),\n ]);\n },\n verifyNewDefinition: async () => {\n const status = await buildSystemdManager(pathInput).status();\n assertServiceRegistrationInstalledAndEnabled(\n SYSTEMD_CONTROLLER,\n status\n );\n },\n });\n },\n uninstall: async () => {\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"disable\", \"--now\", unitName],\n throwOnError: false,\n });\n await rm(unitPath, { force: true });\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"daemon-reload\"],\n throwOnError: false,\n });\n },\n enableAutostart: async () => {\n if (!(await pathExists(unitPath))) {\n throw new Error(\"OpenMeld Service is not installed for systemd.\");\n }\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"enable\", unitName],\n throwOnError: true,\n });\n },\n disableAutostart: async () => {\n if (!(await pathExists(unitPath))) {\n throw new Error(\"OpenMeld Service is not installed for systemd.\");\n }\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"disable\", unitName],\n throwOnError: true,\n });\n },\n start: async () => {\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"enable\", \"--now\", unitName],\n throwOnError: true,\n });\n },\n stop: async () => {\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"disable\", \"--now\", unitName],\n throwOnError: true,\n });\n },\n deactivate: async () => {\n await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"stop\", unitName],\n throwOnError: false,\n });\n },\n status: async () => {\n const installed = await pathExists(unitPath);\n const activeResult = await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"is-active\", unitName],\n throwOnError: false,\n });\n const enabledResult = await runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"is-enabled\", unitName],\n throwOnError: false,\n });\n return {\n installed,\n running: readSystemdServiceActiveProbe(activeResult),\n enabled: readSystemdServiceEnabledProbe(enabledResult),\n definitionPath: installed ? unitPath : null,\n commandSummary: installed\n ? await readSystemServiceCommandSummary(unitPath, \"ExecStart=\")\n : null,\n environmentTarget: installed\n ? await readDaemonServiceEnvironmentTargetFromDefinition({\n controller: SYSTEMD_CONTROLLER,\n path: unitPath,\n })\n : null,\n };\n },\n // systemd does not expose the launchd-style job spawn evidence yet.\n readJobDiagnostics: async () => null,\n waitUntilAbsent: async () => {\n await waitForCondition({\n until: async () => {\n const status = await buildSystemdManager(pathInput).status();\n return !(status.installed || status.running || status.enabled);\n },\n onTimeout: async () => {\n const status = await buildSystemdManager(pathInput).status();\n return buildSystemServiceWaitTimeoutError({\n action: \"absent\",\n controller: SYSTEMD_CONTROLLER,\n details: formatManagerStatusDetails(status),\n });\n },\n });\n },\n waitUntilStopped: async () => {\n await waitForCondition({\n until: async () =>\n !(await buildSystemdManager(pathInput).status()).running,\n onTimeout: async () => {\n const status = await buildSystemdManager(pathInput).status();\n return buildSystemServiceWaitTimeoutError({\n action: \"stopped\",\n controller: SYSTEMD_CONTROLLER,\n details: formatManagerStatusDetails(status),\n });\n },\n });\n },\n waitUntilRunning: async () => {\n await waitForCondition({\n until: async () =>\n (await buildSystemdManager(pathInput).status()).running,\n onTimeout: async () => {\n const status = await buildSystemdManager(pathInput).status();\n return buildSystemServiceWaitTimeoutError({\n action: \"running\",\n controller: SYSTEMD_CONTROLLER,\n details: formatManagerStatusDetails(status),\n });\n },\n });\n },\n };\n}\n\nfunction buildLaunchdManager(\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonServiceManager {\n const serviceIdentity = resolveDaemonServiceIdentity(pathInput);\n const plistPath = resolveLaunchdPlistPath(pathInput);\n const guiDomain =\n process.getuid === undefined ? \"gui/501\" : `gui/${process.getuid()}`;\n const launchdServiceKey = `${guiDomain}/${serviceIdentity.launchdLabel}`;\n\n return {\n controller: LAUNCHD_CONTROLLER,\n install: async (spec) => {\n const definitionWasPresent = await pathExists(plistPath);\n await installMissingServiceDefinitionFailAtomically({\n definitionWasPresent,\n install: async () => {\n await ensureServiceLogDirectory(pathInput);\n await mkdir(dirname(plistPath), { recursive: true });\n await writeFile(plistPath, buildLaunchdPlist(spec, pathInput), {\n encoding: \"utf8\",\n mode: 0o644,\n });\n await chmod(plistPath, 0o644);\n await runCommand({\n command: \"launchctl\",\n args: [\"enable\", launchdServiceKey],\n throwOnError: true,\n });\n },\n rollbackNewDefinition: async () => {\n await runServiceDefinitionRollbackSteps([\n async () =>\n await runCommand({\n command: \"launchctl\",\n args: [\"disable\", launchdServiceKey],\n throwOnError: true,\n }),\n async () => await rm(plistPath, { force: true }),\n ]);\n },\n verifyNewDefinition: async () => {\n const status = await buildLaunchdManager(pathInput).status();\n assertServiceRegistrationInstalledAndEnabled(\n LAUNCHD_CONTROLLER,\n status\n );\n },\n });\n },\n uninstall: async () => {\n await runCommand({\n command: \"launchctl\",\n args: [\"disable\", launchdServiceKey],\n throwOnError: false,\n });\n await runCommand({\n command: \"launchctl\",\n args: [\"bootout\", launchdServiceKey],\n throwOnError: false,\n });\n await runCommand({\n command: \"launchctl\",\n args: [\"remove\", serviceIdentity.launchdLabel],\n throwOnError: false,\n });\n await rm(plistPath, { force: true });\n },\n enableAutostart: async () => {\n if (!(await pathExists(plistPath))) {\n throw new Error(\"OpenMeld Service is not installed for launchd.\");\n }\n await runCommand({\n command: \"launchctl\",\n args: [\"enable\", launchdServiceKey],\n throwOnError: true,\n });\n },\n disableAutostart: async () => {\n if (!(await pathExists(plistPath))) {\n throw new Error(\"OpenMeld Service is not installed for launchd.\");\n }\n await runCommand({\n command: \"launchctl\",\n args: [\"disable\", launchdServiceKey],\n throwOnError: true,\n });\n },\n start: async () => {\n await runCommand({\n command: \"launchctl\",\n args: [\"enable\", launchdServiceKey],\n throwOnError: false,\n });\n const bootstrap = await runCommand({\n command: \"launchctl\",\n args: [\"bootstrap\", guiDomain, plistPath],\n throwOnError: false,\n });\n if (\n bootstrap.exitCode !== 0 &&\n !LAUNCHD_ALREADY_PATTERN.test(bootstrap.stderr)\n ) {\n throw new Error(\n `failed to start launchd service: ${bootstrap.stderr.trim() || bootstrap.stdout.trim()}`\n );\n }\n await runCommand({\n command: \"launchctl\",\n args: [\"enable\", launchdServiceKey],\n throwOnError: false,\n });\n },\n stop: async () => {\n await runCommand({\n command: \"launchctl\",\n args: [\"disable\", launchdServiceKey],\n throwOnError: false,\n });\n await runCommand({\n command: \"launchctl\",\n args: [\"bootout\", launchdServiceKey],\n throwOnError: false,\n });\n },\n deactivate: async () => {\n await runCommand({\n command: \"launchctl\",\n args: [\"bootout\", launchdServiceKey],\n throwOnError: false,\n });\n },\n status: async () => {\n const installed = await pathExists(plistPath);\n const printResult = await runCommand({\n command: \"launchctl\",\n args: [\"print\", launchdServiceKey],\n throwOnError: false,\n });\n const disabledResult = await runCommand({\n command: \"launchctl\",\n args: [\"print-disabled\", guiDomain],\n throwOnError: false,\n });\n if (printResult.exitCode !== 0 && !isLaunchdServiceMissing(printResult)) {\n throw buildServiceManagerProbeError(\"launchctl print\", printResult);\n }\n assertServiceManagerProbeSucceeded(\n \"launchctl print-disabled\",\n disabledResult\n );\n const output = `${printResult.stdout}\\n${printResult.stderr}`;\n const disabledOutput = `${disabledResult.stdout}\\n${disabledResult.stderr}`;\n const enabledFromDisabledServices =\n parseLaunchdEnabledFromDisabledServices(\n disabledOutput,\n serviceIdentity.launchdLabel\n );\n return {\n installed,\n running: LAUNCHD_STATE_PATTERN.test(output),\n enabled: enabledFromDisabledServices ?? parseLaunchdEnabled(output),\n definitionPath: installed ? plistPath : null,\n commandSummary: installed\n ? await readLaunchdProgramArguments(plistPath)\n : null,\n environmentTarget: installed\n ? await readDaemonServiceEnvironmentTargetFromDefinition({\n controller: LAUNCHD_CONTROLLER,\n path: plistPath,\n })\n : null,\n };\n },\n readJobDiagnostics: async () => {\n const printResult = await runCommand({\n command: \"launchctl\",\n args: [\"print\", launchdServiceKey],\n throwOnError: false,\n });\n if (printResult.exitCode === 0) {\n return parseLaunchdServiceJobDiagnostics(\n `${printResult.stdout}\\n${printResult.stderr}`\n );\n }\n if (isLaunchdServiceMissing(printResult)) {\n return {\n controller: LAUNCHD_CONTROLLER,\n loaded: false,\n runs: null,\n state: null,\n lastExitCodeText: null,\n lastExitCode: null,\n pendedNondemandSpawn: null,\n keepaliveRunAtLoad: false,\n };\n }\n return null;\n },\n waitUntilAbsent: async () => {\n await waitForCondition({\n until: async () => {\n const [installed, printResult] = await Promise.all([\n pathExists(plistPath),\n runCommand({\n command: \"launchctl\",\n args: [\"print\", launchdServiceKey],\n throwOnError: false,\n }),\n ]);\n return !installed && isLaunchdServiceMissing(printResult);\n },\n onTimeout: async () => {\n const status = await buildLaunchdManager(pathInput).status();\n return buildSystemServiceWaitTimeoutError({\n action: \"absent\",\n controller: LAUNCHD_CONTROLLER,\n details: formatManagerStatusDetails(status),\n });\n },\n });\n },\n waitUntilStopped: async () => {\n await waitForCondition({\n until: async () => {\n const result = await runCommand({\n command: \"launchctl\",\n args: [\"print\", launchdServiceKey],\n throwOnError: false,\n });\n if (result.exitCode !== 0 && !isLaunchdServiceMissing(result)) {\n throw buildServiceManagerProbeError(\"launchctl print\", result);\n }\n return isLaunchdServiceMissing(result);\n },\n onTimeout: async () => {\n const status = await buildLaunchdManager(pathInput).status();\n return buildSystemServiceWaitTimeoutError({\n action: \"stopped\",\n controller: LAUNCHD_CONTROLLER,\n details: formatManagerStatusDetails(status),\n });\n },\n });\n },\n waitUntilRunning: async () => {\n await waitForCondition({\n until: async () =>\n (await buildLaunchdManager(pathInput).status()).running,\n onTimeout: async () => {\n const manager = buildLaunchdManager(pathInput);\n const status = await manager.status();\n // Diagnostic-only launchd job-state probe on timeout, mirroring the\n // `openmeld service run` startup path so the lifecycle journal can record a\n // never-spawned vs crash-loop verdict. Best-effort; never gates state.\n const jobDiagnostics = manager.readJobDiagnostics\n ? await manager.readJobDiagnostics().catch(() => null)\n : null;\n return buildSystemServiceWaitTimeoutError({\n action: \"running\",\n controller: LAUNCHD_CONTROLLER,\n details: formatManagerStatusDetails(status),\n jobDiagnostics,\n });\n },\n });\n },\n };\n}\n\nfunction buildWindowsManager(\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonServiceManager {\n const identity = resolveDaemonServiceIdentity(pathInput);\n const scriptPath = resolveWindowsServiceScriptPath(pathInput);\n const task = (operation: WindowsUserTaskRequest[\"operation\"]) =>\n runWindowsUserTask({\n name: identity.windowsServiceName,\n legacyScript: scriptPath,\n operation,\n });\n const status = async (): Promise<DaemonServiceManagerRuntimeStatus> => {\n const observed = await task(\"status\");\n if (observed.actionArguments !== null) {\n const action = readWindowsTaskAction(observed.actionArguments);\n return {\n installed: observed.installed,\n running: observed.running,\n enabled: observed.enabled,\n definitionPath: `Task Scheduler: ${identity.windowsServiceName} (current user)`,\n commandSummary: [\n quoteWindowsArg(action.executable),\n ...action.args.map(quoteWindowsArg),\n ].join(\" \"),\n commandSpec: action,\n environmentTarget: serviceEnvironmentTarget(action.env),\n };\n }\n return {\n installed: observed.installed,\n running: observed.running,\n enabled: observed.enabled,\n definitionPath: observed.installed ? scriptPath : null,\n commandSummary: observed.installed\n ? await readWindowsRunnerCommandSummary(scriptPath)\n : null,\n environmentTarget: observed.installed\n ? await readDaemonServiceEnvironmentTargetFromDefinition({\n controller: WINDOWS_CONTROLLER,\n path: scriptPath,\n })\n : null,\n };\n };\n const wait = async (action: \"absent\" | \"stopped\" | \"running\") => {\n await waitForCondition({\n until: async () => {\n const current = await status();\n if (action === \"running\") {\n return current.running;\n }\n return action === \"stopped\" ? !current.running : !current.installed;\n },\n onTimeout: async () =>\n buildSystemServiceWaitTimeoutError({\n action,\n controller: WINDOWS_CONTROLLER,\n details: formatManagerStatusDetails(await status()),\n }),\n });\n };\n return {\n controller: WINDOWS_CONTROLLER,\n install: async (spec) => {\n await ensureServiceLogDirectory(pathInput);\n await runWindowsUserTask({\n name: identity.windowsServiceName,\n legacyScript: scriptPath,\n operation: \"install\",\n executable: windowsPowerShellPath(),\n arguments: windowsTaskActionArguments({\n ...spec,\n logPath: getDaemonSystemServiceLogPath(pathInput),\n }),\n workingDirectory:\n spec.workingDirectory ?? daemonRuntimeRootPath(pathInput),\n });\n assertServiceRegistrationInstalledAndEnabled(\n WINDOWS_CONTROLLER,\n await status()\n );\n await rm(scriptPath, { force: true });\n },\n uninstall: async () => {\n await task(\"uninstall\");\n await rm(scriptPath, { force: true });\n },\n enableAutostart: async () => {\n await task(\"enable\");\n },\n disableAutostart: async () => {\n await task(\"disable\");\n },\n start: async () => {\n await task(\"enable\");\n await task(\"start\");\n },\n stop: async () => {\n await task(\"disable\");\n await task(\"stop\");\n },\n deactivate: async () => {\n await task(\"stop\");\n },\n status,\n readJobDiagnostics: async () => null,\n waitUntilAbsent: () => wait(\"absent\"),\n waitUntilStopped: () => wait(\"stopped\"),\n waitUntilRunning: () => wait(\"running\"),\n };\n}\n\nexport async function readWindowsRunnerCommandSummary(\n path: string\n): Promise<string | null> {\n const file = await readFile(path, \"utf8\").catch(() => null);\n if (!file) {\n return null;\n }\n const lines = file\n .split(WINDOWS_SCRIPT_LINE_SPLIT_PATTERN)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n const line = lines[index];\n if (!line) {\n continue;\n }\n const normalizedLine = line.toLowerCase();\n if (\n !(\n normalizedLine === \"@echo off\" ||\n normalizedLine === \"setlocal\" ||\n normalizedLine.startsWith(\"set \")\n )\n ) {\n return line;\n }\n }\n return null;\n}\n\nasync function readSystemServiceCommandSummary(\n path: string,\n prefix: string\n): Promise<string | null> {\n const file = await readFile(path, \"utf8\").catch(() => null);\n if (!file) {\n return null;\n }\n const line = file\n .split(\"\\n\")\n .map((entry) => entry.trim())\n .find((entry) => entry.startsWith(prefix));\n if (!line) {\n return null;\n }\n return line.slice(prefix.length).trim() || null;\n}\n\nasync function readLaunchdProgramArguments(\n path: string\n): Promise<string | null> {\n const file = await readFile(path, \"utf8\").catch(() => null);\n if (!file) {\n return null;\n }\n const matches = [...file.matchAll(LAUNCHD_STRING_PATTERN)].map(\n (match) => match[1]\n );\n if (matches.length === 0) {\n return null;\n }\n return matches.join(\" \");\n}\n\nconst SERVICE_ENVIRONMENT_TARGET_KEYS = {\n preset: \"OPENMELD_ENV_PRESET\",\n gatewayUrl: \"OPENMELD_GATEWAY_URL\",\n authBaseUrl: \"OPENMELD_AUTH_URL\",\n userFacingCommand: \"OPENMELD_USER_FACING_CLI_COMMAND\",\n} as const;\n\nexport function parseDaemonServiceEnvironmentTargetFromDefinition(input: {\n controller: DaemonServiceController;\n definition: string;\n}): OpenMeldEnvironmentTarget | null {\n return serviceEnvironmentTarget(\n parseDaemonServiceEnvironmentFromDefinition(input)\n );\n}\n\nexport function parseDaemonServiceEnvironmentFromDefinition(input: {\n controller: DaemonServiceController;\n definition: string;\n}): Record<string, string> {\n if (input.controller === SYSTEMD_CONTROLLER) {\n return parseSystemdEnvironment(input.definition);\n }\n if (input.controller === LAUNCHD_CONTROLLER) {\n return parseLaunchdEnvironment(input.definition);\n }\n return parseWindowsEnvironment(input.definition);\n}\n\nfunction serviceEnvironmentTarget(\n environment: Record<string, string>\n): OpenMeldEnvironmentTarget | null {\n const preset = environment[SERVICE_ENVIRONMENT_TARGET_KEYS.preset];\n const gatewayUrl = environment[SERVICE_ENVIRONMENT_TARGET_KEYS.gatewayUrl];\n const authBaseUrl = environment[SERVICE_ENVIRONMENT_TARGET_KEYS.authBaseUrl];\n const userFacingCommand =\n environment[SERVICE_ENVIRONMENT_TARGET_KEYS.userFacingCommand];\n if (\n !(\n (preset === \"prod\" || preset === \"canary\" || preset === \"dev-local\") &&\n gatewayUrl &&\n authBaseUrl &&\n userFacingCommand\n )\n ) {\n return null;\n }\n return {\n preset,\n gatewayUrl,\n authBaseUrl,\n userFacingCommand,\n };\n}\n\nasync function readDaemonServiceEnvironmentTargetFromDefinition(input: {\n controller: DaemonServiceController;\n path: string;\n}): Promise<OpenMeldEnvironmentTarget | null> {\n const definition = await readFile(input.path, \"utf8\").catch(() => null);\n if (!definition) {\n return null;\n }\n return parseDaemonServiceEnvironmentTargetFromDefinition({\n controller: input.controller,\n definition,\n });\n}\n\nfunction parseSystemdEnvironment(definition: string): Record<string, string> {\n const environment: Record<string, string> = {};\n for (const rawLine of definition.split(\"\\n\")) {\n const line = rawLine.trim();\n if (!line.startsWith(\"Environment=\")) {\n continue;\n }\n const assignment = line.slice(\"Environment=\".length);\n const separatorIndex = assignment.indexOf(\"=\");\n if (separatorIndex <= 0) {\n continue;\n }\n const key = assignment.slice(0, separatorIndex);\n let value = assignment.slice(separatorIndex + 1);\n if (value.startsWith('\"') && value.endsWith('\"')) {\n value = value.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, \"\\\\\");\n }\n environment[key] = value;\n }\n return environment;\n}\n\nfunction parseLaunchdEnvironment(definition: string): Record<string, string> {\n const environmentBlock = definition.match(\n LAUNCHD_ENVIRONMENT_BLOCK_PATTERN\n )?.[1];\n if (!environmentBlock) {\n return {};\n }\n const environment: Record<string, string> = {};\n for (const match of environmentBlock.matchAll(\n /<key>([^<]+)<\\/key>\\s*<string>([^<]*)<\\/string>/g\n )) {\n const key = decodeXmlText(match[1] ?? \"\");\n if (!key) {\n continue;\n }\n environment[key] = decodeXmlText(match[2] ?? \"\");\n }\n return environment;\n}\n\nfunction parseWindowsEnvironment(definition: string): Record<string, string> {\n const environment: Record<string, string> = {};\n for (const rawLine of definition.split(WINDOWS_LINE_SEPARATOR_PATTERN)) {\n const match = rawLine.trim().match(WINDOWS_ENVIRONMENT_ASSIGNMENT_PATTERN);\n if (!(match?.[1] && match[2] !== undefined)) {\n continue;\n }\n environment[match[1]] = match[2].replace(/\\\\\"/g, '\"');\n }\n return environment;\n}\n\nfunction decodeXmlText(value: string): string {\n return value\n .replace(/&apos;/g, \"'\")\n .replace(/&quot;/g, '\"')\n .replace(/&gt;/g, \">\")\n .replace(/&lt;/g, \"<\")\n .replace(/&amp;/g, \"&\");\n}\n\nfunction isSystemdAvailable(): Promise<boolean> {\n return runCommand({\n command: \"systemctl\",\n args: [\"--user\", \"--version\"],\n throwOnError: false,\n }).then((result) => result.exitCode === 0);\n}\n\nfunction isLaunchdAvailable(): Promise<boolean> {\n return runCommand({\n command: \"launchctl\",\n args: [\"version\"],\n throwOnError: false,\n }).then((result) => result.exitCode === 0);\n}\n\nfunction isWindowsTaskSchedulerAvailable(): Promise<boolean> {\n return runCommand({\n command: windowsPowerShellPath(),\n args: [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"$ErrorActionPreference='Stop'; $s=New-Object -ComObject Schedule.Service; $s.Connect()\",\n ],\n throwOnError: false,\n }).then((result) => result.exitCode === 0);\n}\n\nasync function ensureServiceLogDirectory(\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<void> {\n await mkdir(dirname(getDaemonSystemServiceLogPath(pathInput)), {\n recursive: true,\n });\n}\n\nexport function guardDaemonServiceManagerMutations(\n manager: DaemonServiceManager,\n pathInput: OpenMeldPathResolutionInput = {}\n): DaemonServiceManager {\n const assertMutationAllowed = async (operation: string): Promise<void> => {\n assertSafePublishedProductionServiceRegistrationMutation(\n operation,\n pathInput\n );\n if (resolveOpenMeldEnvPreset(pathInput) !== \"dev-local\") {\n return;\n }\n const status = await manager.status();\n if (!status.installed) {\n return;\n }\n const env =\n status.commandSpec?.env ??\n (status.definitionPath\n ? parseDaemonServiceEnvironmentFromDefinition({\n controller: manager.controller,\n definition: await readFile(status.definitionPath, \"utf8\"),\n })\n : {});\n if (\n env.OPENMELD_ENV_PRESET !== \"dev-local\" ||\n !env.OPENMELD_HOME ||\n resolve(env.OPENMELD_HOME) !== resolve(resolveOpenMeldRootDir(pathInput))\n ) {\n throw new Error(\n `Cannot ${operation} OpenMeld Service: its registered development home does not match this environment.`\n );\n }\n };\n return {\n ...manager,\n install: async (spec) => {\n await assertMutationAllowed(\"install\");\n await manager.install(spec);\n },\n uninstall: async () => {\n await assertMutationAllowed(\"uninstall\");\n await manager.uninstall();\n },\n enableAutostart: async () => {\n await assertMutationAllowed(\"enable autostart for\");\n await manager.enableAutostart();\n },\n disableAutostart: async () => {\n await assertMutationAllowed(\"disable autostart for\");\n await manager.disableAutostart();\n },\n start: async () => {\n await assertMutationAllowed(\"start\");\n await manager.start();\n },\n stop: async () => {\n await assertMutationAllowed(\"stop\");\n await manager.stop();\n },\n deactivate: async () => {\n await assertMutationAllowed(\"deactivate\");\n await manager.deactivate();\n },\n };\n}\n\nexport async function resolveDaemonServiceManager(\n controller?: DaemonServiceController,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceManager | null> {\n const manager = await resolveUnguardedDaemonServiceManager(\n controller,\n pathInput\n );\n return manager\n ? guardDaemonServiceManagerMutations(manager, pathInput)\n : null;\n}\n\nasync function resolveUnguardedDaemonServiceManager(\n controller?: DaemonServiceController,\n pathInput: OpenMeldPathResolutionInput = {}\n): Promise<DaemonServiceManager | null> {\n if (controller === SYSTEMD_CONTROLLER) {\n if (!(await isSystemdAvailable())) {\n return null;\n }\n return buildSystemdManager(pathInput);\n }\n if (controller === LAUNCHD_CONTROLLER) {\n if (!(await isLaunchdAvailable())) {\n return null;\n }\n return buildLaunchdManager(pathInput);\n }\n if (controller === WINDOWS_CONTROLLER) {\n if (!(await isWindowsTaskSchedulerAvailable())) {\n return null;\n }\n return buildWindowsManager(pathInput);\n }\n\n if (process.platform === \"darwin\") {\n if (!(await isLaunchdAvailable())) {\n return null;\n }\n return buildLaunchdManager(pathInput);\n }\n if (process.platform === \"linux\") {\n if (!(await isSystemdAvailable())) {\n return null;\n }\n return buildSystemdManager(pathInput);\n }\n if (process.platform === \"win32\") {\n if (!(await isWindowsTaskSchedulerAvailable())) {\n return null;\n }\n return buildWindowsManager(pathInput);\n }\n\n return null;\n}\n"],"mappings":"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"}
@@ -4547,6 +4547,7 @@ importOrganizationSkillFromGitHubBodySchema.extend({ context: openMeldRequestCon
4547
4547
  previewOrganizationSkillFromGitHubBodySchema.extend({ context: openMeldRequestContextSchema });
4548
4548
  strictObject({
4549
4549
  context: openMeldRequestContextSchema,
4550
+ preparationIdempotencyKey: string().min(1).max(2048).optional(),
4550
4551
  releases: array(organizationSkillRuntimeReleaseSelectionSchema).max(64)
4551
4552
  });
4552
4553
  strictObject({
@@ -4655,16 +4656,18 @@ const spaceMetaSchema = z$1.strictObject({
4655
4656
  });
4656
4657
  const patchSpaceMetaResponseSchema = spaceMetaSchema;
4657
4658
  const patchSpaceMetaBodySchema = z$1.strictObject({
4659
+ visibility: spaceOrganizationVisibilitySchema.optional(),
4658
4660
  name: spaceNameSchema.optional(),
4659
4661
  purpose: z$1.string().optional(),
4660
4662
  guide: z$1.string().max(MAX_SPACE_GUIDE_LENGTH).optional()
4661
4663
  }).superRefine((value, ctx) => {
4662
- if (value.name !== void 0 || value.purpose !== void 0 || value.guide !== void 0) return;
4664
+ if (value.name !== void 0 || value.visibility !== void 0 || value.purpose !== void 0 || value.guide !== void 0) return;
4663
4665
  ctx.addIssue({
4664
4666
  code: "custom",
4665
- message: "Expected name, purpose or guide"
4667
+ message: "Expected name, purpose, guide or visibility"
4666
4668
  });
4667
4669
  }).transform((value) => ({
4670
+ ...value.visibility === void 0 ? {} : { visibility: value.visibility },
4668
4671
  ...value.name === void 0 ? {} : { name: value.name },
4669
4672
  ...value.purpose === void 0 ? {} : { purpose: value.purpose },
4670
4673
  ...value.guide === void 0 ? {} : { guide: value.guide }
@@ -11863,6 +11866,8 @@ const inboxSourceTargetSchema = discriminatedUnion("kind", [
11863
11866
  }),
11864
11867
  strictObject({
11865
11868
  kind: literal("space"),
11869
+ directMessage: boolean().optional(),
11870
+ agentOwnerActivity: boolean().optional(),
11866
11871
  signalId: identifierSchema.optional(),
11867
11872
  spaceId: identifierSchema,
11868
11873
  threadRootSignalId: identifierSchema.optional()
@@ -11948,6 +11953,14 @@ const spaceInboxSummaryItemSchema = strictObject({
11948
11953
  unreadCount: number().int().positive()
11949
11954
  });
11950
11955
  const spaceInboxSummaryResponseSchema = strictObject({
11956
+ chatUnreadCount: number().int().nonnegative().optional(),
11957
+ chatUnresolvedActionCount: number().int().nonnegative().optional(),
11958
+ chatUnreadUrgentUpdateCount: number().int().nonnegative().optional(),
11959
+ attention: array(strictObject({
11960
+ spaceId: identifierSchema,
11961
+ unresolvedActionCount: number().int().nonnegative(),
11962
+ unreadUrgentUpdateCount: number().int().nonnegative()
11963
+ })).optional(),
11951
11964
  ordinarySpaceUnreadCount: number().int().nonnegative().optional(),
11952
11965
  organizationId: identifierSchema,
11953
11966
  spaces: array(spaceInboxSummaryItemSchema).max(500)
@@ -15163,7 +15176,7 @@ const createInboxApi = (client) => ({
15163
15176
  summary: async (input = {}) => await client.requestJson({
15164
15177
  ...requestOptions$7(input),
15165
15178
  invalidMessage: "invalid Inbox summary response",
15166
- headers: { [OPENMELD_HEADER_INBOX_SUMMARY_VERSION]: "1" },
15179
+ headers: { [OPENMELD_HEADER_INBOX_SUMMARY_VERSION]: "2" },
15167
15180
  method: "GET",
15168
15181
  operation: "inbox.summary",
15169
15182
  schema: inboxSummaryResponseSchema,
@@ -15215,6 +15228,7 @@ const createInboxApi = (client) => ({
15215
15228
  invalidMessage: "invalid Space Inbox summary response",
15216
15229
  method: "GET",
15217
15230
  operation: "inbox.space.summary",
15231
+ headers: { [OPENMELD_HEADER_INBOX_SUMMARY_VERSION]: "2" },
15218
15232
  schema: spaceInboxSummaryResponseSchema,
15219
15233
  url: buildSpaceInboxSummaryPath()
15220
15234
  }),
@@ -15272,7 +15286,7 @@ const createInboxApi = (client) => ({
15272
15286
  function inboxSourceTargetVersionHeaders() {
15273
15287
  return {
15274
15288
  [OPENMELD_HEADER_INBOX_ITEM_KIND_VERSION]: "1",
15275
- [OPENMELD_HEADER_INBOX_SOURCE_TARGET_VERSION]: "4"
15289
+ [OPENMELD_HEADER_INBOX_SOURCE_TARGET_VERSION]: "6"
15276
15290
  };
15277
15291
  }
15278
15292
  function requestOptions$7(input) {
@@ -17761,6 +17775,7 @@ async function getSpaceMessageDetails(client, input) {
17761
17775
  }
17762
17776
  async function updateSpaceMeta(client, input) {
17763
17777
  const parsedBody = patchSpaceMetaBodySchema.safeParse({
17778
+ ...input.visibility === void 0 ? {} : { visibility: input.visibility },
17764
17779
  ...input.name === void 0 ? {} : { name: input.name },
17765
17780
  ...input.purpose === void 0 ? {} : { purpose: input.purpose },
17766
17781
  ...input.guide === void 0 ? {} : { guide: input.guide }
@@ -18229,4 +18244,4 @@ function composeAbortSignals(parent, timeout) {
18229
18244
  //#endregion
18230
18245
  export { buildLocalFolderPickerPath as $, COMPUTER_FILE_ACCESS_RUNTIME_CAPABILITY as $n, agentActivitySessionInventoryQuerySchema as $r, createProjectsApi as $t, buildCurrentOrganizationDirectoryPath as A, OPENMELD_HEADER_REQUEST_ID as An, resumeCenterAgentRoutineResponseSchema as Ar, createAccountSpaceIndexApi as At, buildCurrentOrganizationMessageChannelsPath as B, spaceDispatchTraceAttemptStatusSchema as Bn, localProjectControlDaemonFrameSchema as Br, createFetchTransport as Bt, buildCenterAgentSessionPath as C, MAX_TEXT_LENGTH as Cn, submitFeedbackIssueRequestSchema as Cr, buildRoutineTargetSpacesPath as Ct, buildCurrentAgentProfileSessionRoute as D, resolveCustomMentionAliasOverride as Dn, listCenterAgentRoutineRunsResponseSchema as Dr, buildSpaceInboxReadThroughPath as Dt, buildComputerFileAccessUpdatePath as E, parseServerErrorFrame as En, deleteCenterAgentRoutineResponseSchema as Er, buildSpaceBootstrapReadPath as Et, buildCurrentOrganizationMessageChannelPath as F, spaceEntryTargetSchema as Fn, agentActivityProviderSchema as Fr, createComputerFileAccessApi as Ft, buildFeedbackIssueSubmissionPath as G, submitAgentControllerTaskLifecycleEventItemSchema as Gn, resolvedSpaceMemberProfileSchema as Gr, createOpenMeldApiClient as Gt, buildCurrentOrganizationSpacesWithMemberCountsPath as H, spaceDispatchTraceResponseSchema as Hn, leaveSpaceResponseSchema as Hr, createLocalFolderPickerApi as Ht, buildCurrentOrganizationMessageChannelRegistrationPath as I, SPACE_DISPATCH_TRACE_PROMPT_PREVIEW_MAX_CHARS as In, agentActivitySessionStatusSchema as Ir, createConfigApi as It, buildInboxItemReadPath as J, summarizeComputerFileAccessPolicy as Jn, spaceMemberDirectoryEntrySchema as Jr, createOrganizationSkillsApi as Jt, buildInboxItemDismissPath as K, ownerComputerDiagnosticsSchema as Kn, spaceMemberAgentWakeAvailabilitySchema as Kr, createOrganizationApi as Kt, buildCurrentOrganizationMessageChannelRegistrationPollPath as L, SPACE_DISPATCH_TRACE_RESPONSE_CONTRACT_VERSION_HEADER as Ln, agentActivitySnapshotQuerySchema as Lr, createCurrentDeviceApi as Lt, buildCurrentOrganizationInformationProtectionPath as M, buildOpenMeldRequestContextHeaders as Mn, AGENT_ACTIVITY_EVENT_MAX_BYTES as Mr, createAgentProfileBindingApi as Mt, buildCurrentOrganizationLogoPath as N, toErrorMessage$2 as Nn, AGENT_ACTIVITY_PRESENCE_TTL_MAX_MS as Nr, createAgentProfileWorkRecoveryApi as Nt, buildCurrentOrganizationCenterAgentMemoryWipeSelfPath as O, OPENMELD_HEADER_PROFILE_ID as On, listCenterAgentRoutinesResponseSchema as Or, buildSpaceInboxSummaryPath as Ot, buildCurrentOrganizationMemberOpenMeldServiceStatusesPath as P, getSpaceUpdatesResponseSchema as Pn, agentActivityEventSchema as Pr, createCenterAgentApi as Pt, buildInboxSummaryPath as Q, gatewayErrorEnvelopeSchema as Qn, agentActivityInventorySessionStatusSchema as Qr, createProfilesApi as Qt, buildCurrentOrganizationMessageChannelRegistrationsPath as R, projectSpaceDispatchTraceFinalVisibleOutcome as Rn, agentActivitySnapshotResponseSchema as Rr, createDirectMessageApi as Rt, buildCenterAgentProfilePath as S, DAEMON_STREAM_KEEPALIVE_PONG as Sn, organizationComputersResponseSchema as Sr, buildRoutineRunsPath as St, buildComputerFileAccessReadPath as T, parseIncoming as Tn, createCenterAgentRoutineResponseSchema as Tr, buildSpaceAttachmentDownloadPath as Tt, buildDirectMessageConversionPath as U, observabilityWakeTraceSelectorSchema as Un, postSpaceMembersResponseSchema as Ur, createLocalProjectControlApi as Ut, buildCurrentOrganizationSpacesPath as V, spaceDispatchTraceDispatchStatusSchema as Vn, localProjectControlDiscoverProjectsResponseSchema as Vr, createInboxApi as Vt, buildDirectMessageSpacePath as W, projectObservabilityWakeCorrelation as Wn, removeSpaceMembersResponseSchema as Wr, createLocalRuntimeExpectedRoutesApi as Wt, buildInboxPath as X, agentProfileCreationConfigurationSchema as Xn, spaceMemberKindSchema as Xr, createPrepareReadinessApi as Xt, buildInboxMarkAllReadPath as Y, DEFAULT_AGENT_PROFILE_CREATION_CONFIGURATION as Yn, spaceMemberDirectorySchema as Yr, createOrganizationUsageApi as Yt, buildInboxPreferencesPath as Z, createAgentProfileCreationRequestBodySchema as Zn, agentActivityInventorySessionOriginSchema as Zr, createProfileSpaceHistoryApi as Zt, buildCenterAgentDirectMessageSpacePath as _, agentControllerCollaborationModeSchema as _i, updateSpaceFileEntry as _n, ADDITIONAL_HUMAN_PROFILE_CREATION_DISABLED_MESSAGE as _r, buildProjectPath as _t, buildAgentActivitySessionsPath as a, listProjectsResponseSchema as ai, getModelCatalog as an, organizationSpaceDirectoryWithMemberCountsResponseSchema as ar, buildOrganizationDocumentsPath as at, buildCenterAgentMemberResearchPath as b, uploadSpaceFile as bn, profileCapabilitiesResponseSchema as br, buildRoutinePausePath as bt, buildAgentProfileCreationApprovalPreferencePath as c, centerAgentToolSpeakerSchema as ci, listSpaceFiles as cn, spaceMetaSchema as cr, buildOrganizationSkillGitHubPreviewPath as ct, buildAgentProfileCreationRequestDecisionPath as d, START_BOUNDED_VERSION_SCHEMA as di, resolveAccountSpaceIndexGatewayHost as dn, organizationSkillBundleSchema as dr, buildOrganizationSkillsPath as dt, agentActivitySessionInventoryResponseSchema as ei, createRoutinesApi as en, OPENMELD_RUNTIME_CAPABILITIES_HEADER as er, buildLocalProjectControlPath as et, buildAgentProfileCreationRequestRetryPath as f, START_ISO_DATE_TIME_SCHEMA as fi, resolveProfileSpaceHistoryGatewayHost as fn, organizationSkillReleaseSummarySchema as fr, buildOrganizationUsageOverviewPath as ft, buildCenterAgentDesignationPath as g, agentControllerPermissionModeSchema as gi, updateSpaceFileContent as gn, ADDITIONAL_HUMAN_PROFILE_CREATION_DISABLED_CODE as gr, buildProfileSpaceHistoryUpsertPath as gt, buildCenterAgentAuditJournalPath as h, localAgentCatalogSchema as hi, trashSpaceFileEntry as hn, organizationDirectoryResponseSchema as hr, buildProfileSpaceHistoryStatusPath as ht, buildAccountSpaceIndexPath as i, createProjectResponseSchema as ii, downloadSpaceFileContent as in, modelCatalogSchema as ir, buildOrganizationDocumentPath as it, buildCurrentOrganizationFeedbackReportingPolicyPath as j, OPENMELD_HEADER_SPACE_ADDRESSING_VERSION as jn, updateCenterAgentRoutineResponseSchema as jr, createAgentActivityApi as jt, buildCurrentOrganizationComputersPath as k, OPENMELD_HEADER_REQUESTED_ORGANIZATION_ID as kn, pauseCenterAgentRoutineResponseSchema as kr, buildSpaceInboxUnreadTargetsPath as kt, buildAgentProfileCreationDefaultsPath as l, openCodePermissionConfigSchema as li, normalizeApiBaseUrl as ln, getOrganizationSkillResponseSchema as lr, buildOrganizationSkillMaintainersPath as lt, buildAgentProfileWorkRecoveryRoute as m, startReplyReadinessSummarySchema as mi, toStructuredApiClientFailure as mn, stringifyOrganizationSkillBundleCanonicalJson as mr, buildProfileSpaceHistoryListPath as mt, OpenMeldApiClientInvalidResponseError as n, observedLocalAgentSessionSchema as ni, createSpaceApi as nn, computerFileAccessPolicyInputSchema as nr, buildOrganizationDocumentApproveDraftPath as nt, buildAgentActivitySnapshotPath as o, projectSchema as oi, getSpaceFile as on, resolveInitialSpaceAccessMode as or, buildOrganizationSkillEnabledPath as ot, buildAgentProfileCreationRequestsPath as p, START_TRIMMED_NON_EMPTY_STRING_SCHEMA as pi, setSpaceAccessMode as pn, organizationSkillSummarySchema as pr, buildProfileRoute as pt, buildInboxItemPath as q, projectOwnerComputerLocalRuntimes as qn, spaceMemberDirectoryAllowedRelationsSchema as qr, createOrganizationDocumentsApi as qt, buildAccountSpaceActiveWakeSummaryPath as r, archiveProjectResponseSchema as ri, createSpaceFolder as rn, computerFileAccessPolicySchema as rr, buildOrganizationDocumentDiscardDraftPath as rt, buildAgentActivityStatsPath as s, updateProjectResponseSchema as si, listSpaceFileRevisions as sn, spaceCreatorSchema as sr, buildOrganizationSkillGitHubImportPath as st, OpenMeldApiClientHttpError as t, localAgentSessionProviderSchema as ti, createRuntimeReportingApi as tn, computerFileAccessDaemonFrameSchema as tr, buildModelCatalogPath as tt, buildAgentProfileCreationRequestCancelPath as u, START_BOUNDED_ID_SCHEMA as ui, publicSpaceUrls as un, listOrganizationSkillsResponseSchema as ur, buildOrganizationSkillPath as ut, buildCenterAgentInboxReadThroughPath as v, toCompatibleSpaceAddressingRequestWireValue as vi, updateSpaceMeta as vn, authProfileKindSchema as vr, buildProjectsPath as vt, buildCenterAgentSessionsPath as w, parseEnvelope as wn, submitFeedbackIssueResponseSchema as wr, buildRoutinesPath as wt, buildCenterAgentOperatingStatePath as x, DAEMON_STREAM_KEEPALIVE_PING as xn, profileErrorResponseSchema as xr, buildRoutineResumePath as xt, buildCenterAgentInboxSummaryPath as y, uploadSpaceAttachment as yn, authProfileManagedRoleSchema as yr, buildRoutinePath as yt, buildCurrentOrganizationMessageChannelSetupRequestsPath as z, resolveSpaceDispatchTraceRootCause as zn, localProjectControlConnectionSchema as zr, createFeedbackApi as zt };
18231
18246
 
18232
- //# sourceMappingURL=dist-DePUS7gW.js.map
18247
+ //# sourceMappingURL=dist-C9GguxOC.js.map