openmeld 0.3.212 → 0.3.214

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 (109) hide show
  1. package/dist/{add-me-membership-BwPpVKtA.js → add-me-membership-BaqG9F5c.js} +2 -2
  2. package/dist/{add-me-membership-BwPpVKtA.js.map → add-me-membership-BaqG9F5c.js.map} +1 -1
  3. package/dist/{agents-Y-UJ74By.js → agents-y9C8FCyv.js} +8 -8
  4. package/dist/{agents-Y-UJ74By.js.map → agents-y9C8FCyv.js.map} +1 -1
  5. package/dist/{api-client-foundation-CrQN8_-N.js → api-client-foundation-BYnU1pbS.js} +1 -1
  6. package/dist/{api-client-foundation-DjbtuE52.js → api-client-foundation-CKRP7Ymg.js} +3 -3
  7. package/dist/{api-client-foundation-DjbtuE52.js.map → api-client-foundation-CKRP7Ymg.js.map} +1 -1
  8. package/dist/auth-session-BWKfXWxl.js +4 -0
  9. package/dist/{auth-session-Dqz9X4F0.js → auth-session-gaLjWIKR.js} +67 -8
  10. package/dist/auth-session-gaLjWIKR.js.map +1 -0
  11. package/dist/{base-url-C6sHRNGu.js → base-url-BczddvzH.js} +2 -2
  12. package/dist/{base-url-C6sHRNGu.js.map → base-url-BczddvzH.js.map} +1 -1
  13. package/dist/{base-url-BE3pFiOZ.js → base-url-CfyKRz89.js} +1 -1
  14. package/dist/{command-jgHbP21v.js → command-C72QNhjP.js} +13 -13
  15. package/dist/{command-jgHbP21v.js.map → command-C72QNhjP.js.map} +1 -1
  16. package/dist/computer-connection-Dv9kex7h.js +120 -0
  17. package/dist/computer-connection-Dv9kex7h.js.map +1 -0
  18. package/dist/{computer-connection-review-CzSpaHE0.js → computer-connection-review-_ZLPsdE_.js} +6 -6
  19. package/dist/{computer-connection-review-CzSpaHE0.js.map → computer-connection-review-_ZLPsdE_.js.map} +1 -1
  20. package/dist/{computer-disconnect-DNM7jvda.js → computer-disconnect-BJ-Tl-7q.js} +9 -9
  21. package/dist/{computer-disconnect-DNM7jvda.js.map → computer-disconnect-BJ-Tl-7q.js.map} +1 -1
  22. package/dist/{computer-setup-continuation-BqdhIAjT.js → computer-setup-continuation-CN383Vvy.js} +4 -4
  23. package/dist/{computer-setup-continuation-BqdhIAjT.js.map → computer-setup-continuation-CN383Vvy.js.map} +1 -1
  24. package/dist/{control-plane-PxntAyDq.js → control-plane-Bpu7g9Av.js} +2 -2
  25. package/dist/{control-plane-PxntAyDq.js.map → control-plane-Bpu7g9Av.js.map} +1 -1
  26. package/dist/{daemon-runtime-lease-Dd4hdHNo.js → daemon-runtime-lease-CIzOT1zx.js} +2 -2
  27. package/dist/{daemon-runtime-lease-Dd4hdHNo.js.map → daemon-runtime-lease-CIzOT1zx.js.map} +1 -1
  28. package/dist/{daemon-runtime-lease-y3n1K0-C.js → daemon-runtime-lease-_M6hW8Mg.js} +1 -1
  29. package/dist/{daemon-service-manager-GiMCiTmu.js → daemon-service-manager-DxS5eH_N.js} +4 -4
  30. package/dist/{daemon-service-manager-GiMCiTmu.js.map → daemon-service-manager-DxS5eH_N.js.map} +1 -1
  31. package/dist/{daemon-service-manager-Bh0LoLed.js → daemon-service-manager-fPpyIyrU.js} +1 -1
  32. package/dist/{daemon-service-runtime-CWTlAhZY.js → daemon-service-runtime-CGT3yVOs.js} +113 -26
  33. package/dist/daemon-service-runtime-CGT3yVOs.js.map +1 -0
  34. package/dist/{daemon-service-update-coordinator-DcjOzGu1.js → daemon-service-update-coordinator--xLHNqDT.js} +966 -210
  35. package/dist/daemon-service-update-coordinator--xLHNqDT.js.map +1 -0
  36. package/dist/{daemon-state-C37ZtIZK.js → daemon-state-CoAZLwpi.js} +3 -3
  37. package/dist/{daemon-state-C37ZtIZK.js.map → daemon-state-CoAZLwpi.js.map} +1 -1
  38. package/dist/dist-CABuqfdH.js +4 -0
  39. package/dist/{dist-jsWwS864.js → dist-Dj3TOx03.js} +548 -223
  40. package/dist/dist-Dj3TOx03.js.map +1 -0
  41. package/dist/distribution-BDQT2ilb.js +20 -0
  42. package/dist/distribution-BDQT2ilb.js.map +1 -0
  43. package/dist/{elapsed-time-iFOSSUJo.js → elapsed-time-CCFWbCC8.js} +9 -7
  44. package/dist/{elapsed-time-iFOSSUJo.js.map → elapsed-time-CCFWbCC8.js.map} +1 -1
  45. package/dist/{installation-inventory-B0cbVLun.js → installation-inventory-C4WKcVEj.js} +6 -6
  46. package/dist/{installation-inventory-B0cbVLun.js.map → installation-inventory-C4WKcVEj.js.map} +1 -1
  47. package/dist/{local-components-H3SkJMC1.js → local-components-B6SCXZf9.js} +10 -2
  48. package/dist/local-components-B6SCXZf9.js.map +1 -0
  49. package/dist/{lock-Dxp6o_t_.js → lock-CAt9uTnZ.js} +5 -48
  50. package/dist/lock-CAt9uTnZ.js.map +1 -0
  51. package/dist/{openmeld-B4gQCCex.js → openmeld-DpV9lAF-.js} +325 -190
  52. package/dist/openmeld-DpV9lAF-.js.map +1 -0
  53. package/dist/openmeld-dev.js +1 -1
  54. package/dist/{openmeld-environment-target-NtJYJe1D.js → openmeld-environment-target-BWI2adGw.js} +3 -3
  55. package/dist/{openmeld-environment-target-NtJYJe1D.js.map → openmeld-environment-target-BWI2adGw.js.map} +1 -1
  56. package/dist/{openmeld-maintenance-worker-DtY_H7Bv.js → openmeld-maintenance-worker-Blfu_oOo.js} +9 -9
  57. package/dist/{openmeld-maintenance-worker-DtY_H7Bv.js.map → openmeld-maintenance-worker-Blfu_oOo.js.map} +1 -1
  58. package/dist/{openmeld-tools-update-join-DS_EIL5q.js → openmeld-tools-update-join-BpLwmowQ.js} +6 -4
  59. package/dist/{openmeld-tools-update-join-DS_EIL5q.js.map → openmeld-tools-update-join-BpLwmowQ.js.map} +1 -1
  60. package/dist/{openmeld-tools-update-process-frame-CbZPpc7D.js → openmeld-tools-update-process-frame-0X-t0Kjv.js} +2 -2
  61. package/dist/{openmeld-tools-update-process-frame-CbZPpc7D.js.map → openmeld-tools-update-process-frame-0X-t0Kjv.js.map} +1 -1
  62. package/dist/{openmeld-tools-update-process-frame-CcPLrSsw.js → openmeld-tools-update-process-frame-DX1Dc8VI.js} +1 -1
  63. package/dist/openmeld.js +4 -4
  64. package/dist/{prepare-session-executor-CWKqfuse.js → prepare-session-executor-Cfm3EvXl.js} +176 -23
  65. package/dist/prepare-session-executor-Cfm3EvXl.js.map +1 -0
  66. package/dist/process-identity-Clby123a.js +145 -0
  67. package/dist/process-identity-Clby123a.js.map +1 -0
  68. package/dist/{runtime-transport-BQAmcHwF.js → runtime-transport-D8G8sANa.js} +113 -10
  69. package/dist/runtime-transport-D8G8sANa.js.map +1 -0
  70. package/dist/{service-CTG3_X0o.js → service-Cl_Ge6oJ.js} +949 -75
  71. package/dist/service-Cl_Ge6oJ.js.map +1 -0
  72. package/dist/{distribution-DY2fBeSW.js → service-account-admission-Dy2W3n3_.js} +9 -19
  73. package/dist/service-account-admission-Dy2W3n3_.js.map +1 -0
  74. package/dist/{service-account-authorization-Dq4LcAVa.js → service-account-authorization-4oZuo8sT.js} +6 -6
  75. package/dist/{service-account-authorization-Dq4LcAVa.js.map → service-account-authorization-4oZuo8sT.js.map} +1 -1
  76. package/dist/{service-account-control-BTR_X7QM.js → service-account-control-CTXv3924.js} +11 -12
  77. package/dist/service-account-control-CTXv3924.js.map +1 -0
  78. package/dist/{service-control-capabilities-ChRe8hkw.js → service-control-capabilities-B-vCQoBV.js} +1 -1
  79. package/dist/service-control-capabilities-ptf0u8n5.js +70 -0
  80. package/dist/service-control-capabilities-ptf0u8n5.js.map +1 -0
  81. package/dist/service-control-carrier-capability-hvpD7hGf.js +24 -0
  82. package/dist/service-control-carrier-capability-hvpD7hGf.js.map +1 -0
  83. package/dist/upgrade-EWdIdoHm.js +4 -0
  84. package/dist/{upgrade-DAVEeo8B.js → upgrade-vuPM1iX3.js} +12 -9
  85. package/dist/{upgrade-DAVEeo8B.js.map → upgrade-vuPM1iX3.js.map} +1 -1
  86. package/dist/{windows-user-task-DxPN7TzK.js → windows-user-task-FdycoSb4.js} +1 -1
  87. package/dist/{windows-user-task-DqJWtlAm.js → windows-user-task-i0oHCBc0.js} +49 -19
  88. package/dist/windows-user-task-i0oHCBc0.js.map +1 -0
  89. package/package.json +2 -2
  90. package/dist/auth-session-Dqz9X4F0.js.map +0 -1
  91. package/dist/auth-session-bRzDGlXy.js +0 -4
  92. package/dist/computer-connection-DvqsgYls.js +0 -81
  93. package/dist/computer-connection-DvqsgYls.js.map +0 -1
  94. package/dist/daemon-service-runtime-CWTlAhZY.js.map +0 -1
  95. package/dist/daemon-service-update-coordinator-DcjOzGu1.js.map +0 -1
  96. package/dist/dist--pb6JxqG.js +0 -4
  97. package/dist/dist-jsWwS864.js.map +0 -1
  98. package/dist/distribution-DY2fBeSW.js.map +0 -1
  99. package/dist/local-components-H3SkJMC1.js.map +0 -1
  100. package/dist/lock-Dxp6o_t_.js.map +0 -1
  101. package/dist/openmeld-B4gQCCex.js.map +0 -1
  102. package/dist/prepare-session-executor-CWKqfuse.js.map +0 -1
  103. package/dist/runtime-transport-BQAmcHwF.js.map +0 -1
  104. package/dist/service-CTG3_X0o.js.map +0 -1
  105. package/dist/service-account-control-BTR_X7QM.js.map +0 -1
  106. package/dist/service-control-capabilities-C5SxnBg2.js +0 -54
  107. package/dist/service-control-capabilities-C5SxnBg2.js.map +0 -1
  108. package/dist/upgrade-DKXu-1wO.js +0 -4
  109. package/dist/windows-user-task-DqJWtlAm.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as DEV_LOCAL_GATEWAY_BASE_URL } from "./base-url-C6sHRNGu.js";
3
+ import { n as DEV_LOCAL_GATEWAY_BASE_URL } from "./base-url-BczddvzH.js";
4
4
  //#region src/openmeld-dev.ts
5
5
  const LOCAL_GATEWAY_URL = DEV_LOCAL_GATEWAY_BASE_URL;
6
6
  const LOCAL_AUTH_URL = "http://localhost:8788";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { t as normalizeBaseUrl } from "./urls-CY2uzH2-.js";
4
- import { dt as resolveOpenMeldEnvPreset } from "./lock-Dxp6o_t_.js";
5
- import { a as resolveBaseUrl, r as normalizeGatewayBaseUrl, s as resolveDefaultGatewayBaseUrl } from "./base-url-C6sHRNGu.js";
4
+ import { ct as resolveOpenMeldEnvPreset } from "./lock-CAt9uTnZ.js";
5
+ import { a as resolveBaseUrl, r as normalizeGatewayBaseUrl, s as resolveDefaultGatewayBaseUrl } from "./base-url-BczddvzH.js";
6
6
  import process$1 from "node:process";
7
7
  //#region src/runtime/cli-entry-command.ts
8
8
  const OPENMELD_CLI_COMMAND = "openmeld";
@@ -253,4 +253,4 @@ function normalizeOptionalText(value) {
253
253
  //#endregion
254
254
  export { formatOpenMeldCliCommand as a, formatOpenMeldCliTextBlock as c, resolveSetupFollowUpCliEntryCommand as d, resolveUserFacingCliEntryCommand as f, formatInlineOpenMeldCliCommands as i, formatProfileAwareOpenMeldCliCommand as l, resolveOpenMeldEnvironmentTargetFromEnv as n, formatOpenMeldCliCommands as o, resolveAuthBaseUrl as r, formatOpenMeldCliLine as s, resolveOpenMeldEnvironmentTarget as t, formatProfileAwareOpenMeldCliCommands as u };
255
255
 
256
- //# sourceMappingURL=openmeld-environment-target-NtJYJe1D.js.map
256
+ //# sourceMappingURL=openmeld-environment-target-BWI2adGw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-environment-target-NtJYJe1D.js","names":["OPENMELD_USER_FACING_CLI_COMMAND_ENV","process","process"],"sources":["../src/runtime/cli-entry-command.ts","../src/config/auth-url.ts","../src/config/openmeld-environment-target.ts"],"sourcesContent":["import process from \"node:process\";\n\nconst OPENMELD_CLI_COMMAND = \"openmeld\";\nconst OPENMELD_CLI_NPX_COMMAND = \"npx -y openmeld@latest\";\nconst OPENMELD_SETUP_FOLLOW_UP_CLI_COMMAND_ENV =\n \"OPENMELD_SETUP_FOLLOW_UP_CLI_COMMAND\";\nconst OPENMELD_USER_FACING_CLI_COMMAND_ENV = \"OPENMELD_USER_FACING_CLI_COMMAND\";\nconst OPENMELD_TOP_LEVEL_COMMANDS = [\n \"adapter\",\n \"agents\",\n \"auth\",\n \"computer\",\n \"daemon\",\n \"doctor\",\n \"help\",\n \"login\",\n \"profile\",\n \"profiles\",\n \"prompt\",\n \"reset\",\n \"send\",\n \"service\",\n \"setup\",\n \"skills\",\n \"space\",\n \"start\",\n \"tail\",\n \"upgrade\",\n \"view\",\n \"whoami\",\n] as const;\nconst OPENMELD_COMMAND_PREFIX_RE = /^openmeld(?=$|\\s)/u;\nconst OPENMELD_COMMAND_LINE_RE =\n /^(?<prefix>\\s*(?:(?:[$*-])\\s+|\\d+\\)\\s+)??)(?<command>openmeld(?=$|\\s).*)$/u;\nconst OPENMELD_COMMAND_AFTER_PIPE_RE =\n /^(?<prefix>.*\\|\\s+)(?<command>openmeld(?=$|\\s).*)$/u;\nconst INLINE_OPENMELD_COMMAND_RE = /`(openmeld(?: [^`]*)?)`/gu;\nconst CLI_OPTION_NAME_RE = /^[a-z][a-z0-9-]*$/u;\nconst FIRST_CLI_OPERAND_OR_OPTION_RE =\n /^(?<commandPath>.*?)(?<tail>\\s+(?:--|<).*)$/u;\nconst INLINE_OPENMELD_TOP_LEVEL_MENTION_RE = new RegExp(\n `\\\\bats (?<command>${OPENMELD_TOP_LEVEL_COMMANDS.join(\"|\")})\\\\b`,\n \"gu\"\n);\nconst NEWLINE_SPLIT_RE = /\\r?\\n/u;\nconst WHITESPACE_SPLIT_RE = /\\s+/u;\nconst PROFILE_AWARE_TOP_LEVEL_COMMANDS = new Set([\"whoami\"]);\nconst PROFILE_AWARE_SPACE_COMMANDS = new Set([\n \"add-me\",\n \"add-agents\",\n \"add-human-profiles\",\n \"add-members\",\n \"contract\",\n \"create\",\n \"delete\",\n \"guide\",\n \"history\",\n \"join\",\n \"leave\",\n \"list\",\n \"password\",\n \"publication\",\n \"remove-members\",\n \"result\",\n \"send\",\n \"status\",\n \"updates\",\n \"watch\",\n]);\nconst SPACE_PARENT_OPTIONS_WITH_VALUE = new Set([\"--gateway-url\"]);\n\ntype CliEntryCommandInput = {\n env?: NodeJS.ProcessEnv;\n argv?: string[];\n};\n\ntype ProfileAwareCliCommandInput = CliEntryCommandInput & {\n profileId?: string | null;\n resolvedView?: \"human\" | \"agent\" | string;\n};\n\nexport function resolveUserFacingCliEntryCommand(\n input: CliEntryCommandInput = {}\n): string {\n const env = input.env ?? process.env;\n const explicitCommand = normalizeText(\n env[OPENMELD_USER_FACING_CLI_COMMAND_ENV]\n );\n if (explicitCommand.length > 0) {\n return explicitCommand;\n }\n return isNpxCliInvocation(input)\n ? OPENMELD_CLI_NPX_COMMAND\n : OPENMELD_CLI_COMMAND;\n}\n\nexport function resolveSetupFollowUpCliEntryCommand(\n input: CliEntryCommandInput = {}\n): string {\n const env = input.env ?? process.env;\n const setupCommand = normalizeText(\n env[OPENMELD_SETUP_FOLLOW_UP_CLI_COMMAND_ENV]\n );\n if (setupCommand.length > 0) {\n return setupCommand;\n }\n return resolveUserFacingCliEntryCommand(input);\n}\n\nexport function formatOpenMeldCliCommand(\n command: string,\n input: CliEntryCommandInput = {}\n): string {\n if (!OPENMELD_COMMAND_PREFIX_RE.test(command)) {\n return command;\n }\n return command.replace(\n OPENMELD_COMMAND_PREFIX_RE,\n resolveUserFacingCliEntryCommand(input)\n );\n}\n\nexport function formatOpenMeldCliCommands(\n commands: string[],\n input: CliEntryCommandInput = {}\n): string[] {\n return commands.map((command) => formatOpenMeldCliLine(command, input));\n}\n\nexport function formatProfileAwareOpenMeldCliCommand(\n command: string,\n input: ProfileAwareCliCommandInput = {}\n): string {\n return formatOpenMeldCliCommand(\n applyProfileAwareCommandScope(command, input),\n input\n );\n}\n\nexport function formatProfileAwareOpenMeldCliCommands(\n commands: string[],\n input: ProfileAwareCliCommandInput = {}\n): string[] {\n return commands.map((command) =>\n formatProfileAwareOpenMeldCliCommand(command, input)\n );\n}\n\nexport function formatInlineOpenMeldCliCommands(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n return text.replace(INLINE_OPENMELD_COMMAND_RE, (_, command: string) => {\n return `\\`${formatOpenMeldCliCommand(command, input)}\\``;\n });\n}\n\nexport function formatOpenMeldCliLine(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n const inlineFormatted = formatInlineOpenMeldCliCommands(text, input);\n const lineMatch = OPENMELD_COMMAND_LINE_RE.exec(inlineFormatted);\n if (lineMatch?.groups?.command) {\n return formatBareOpenMeldCliMentions(\n `${lineMatch.groups.prefix ?? \"\"}${formatOpenMeldCliCommand(\n lineMatch.groups.command,\n input\n )}`,\n input\n );\n }\n\n const pipeMatch = OPENMELD_COMMAND_AFTER_PIPE_RE.exec(inlineFormatted);\n if (pipeMatch?.groups?.command) {\n return formatBareOpenMeldCliMentions(\n `${pipeMatch.groups.prefix}${formatOpenMeldCliCommand(\n pipeMatch.groups.command,\n input\n )}`,\n input\n );\n }\n\n return formatBareOpenMeldCliMentions(inlineFormatted, input);\n}\n\nexport function formatOpenMeldCliTextBlock(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n return text\n .split(NEWLINE_SPLIT_RE)\n .map((line) => formatOpenMeldCliLine(line, input))\n .join(\"\\n\");\n}\n\nfunction isNpxCliInvocation(input: CliEntryCommandInput): boolean {\n const env = input.env ?? process.env;\n const argv = input.argv ?? process.argv;\n const npmCommand = normalizeText(env.npm_command).toLowerCase();\n const npmExecPath = normalizePath(env.npm_execpath);\n const npmUserAgent = normalizeText(env.npm_config_user_agent).toLowerCase();\n const usesNpmExec =\n npmCommand === \"exec\" &&\n npmExecTargetIsOpenMeldCli(env) &&\n (npmUserAgent.startsWith(\"npm/\") ||\n npmExecPath.includes(\"/npm/\") ||\n npmExecPath.endsWith(\"/npm-cli.js\"));\n if (usesNpmExec) {\n return true;\n }\n\n const scriptPath = normalizePath(argv[1]);\n return scriptPath.includes(\"/.npm/\") && scriptPath.includes(\"_npx\");\n}\n\nfunction npmExecTargetIsOpenMeldCli(env: NodeJS.ProcessEnv): boolean {\n // Every descendant of `npm exec` inherits npm_command=exec, so a openmeld\n // process spawned inside e.g. `npx vitest` carries the same env markers as\n // `npx openmeld`. npm records the resolved bin command it executed (quoted)\n // in npm_lifecycle_script; only that target proves openmeld itself was the\n // npx invocation.\n const execTarget = normalizeText(env.npm_lifecycle_script).replaceAll(\n '\"',\n \"\"\n );\n return execTarget === OPENMELD_CLI_COMMAND;\n}\n\nfunction formatBareOpenMeldCliMentions(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n return text.replace(\n INLINE_OPENMELD_TOP_LEVEL_MENTION_RE,\n (_, command: string) => {\n return formatOpenMeldCliCommand(`openmeld ${command}`, input);\n }\n );\n}\n\nfunction applyProfileAwareCommandScope(\n command: string,\n input: ProfileAwareCliCommandInput\n): string {\n if (!OPENMELD_COMMAND_PREFIX_RE.test(command)) {\n return command;\n }\n\n let scopedCommand = command.trimEnd();\n const profileId = normalizeText(input.profileId ?? undefined);\n if (profileId.length > 0) {\n scopedCommand = appendCliOption(scopedCommand, \"profile\", profileId);\n }\n if (input.resolvedView === \"agent\") {\n scopedCommand = appendCliOption(scopedCommand, \"view\", \"agent\");\n }\n return scopedCommand;\n}\n\nfunction appendCliOption(\n command: string,\n optionName: string,\n value: string\n): string {\n if (\n !CLI_OPTION_NAME_RE.test(optionName) ||\n hasCliOption(command, optionName)\n ) {\n return command;\n }\n if (optionName === \"profile\") {\n return insertCliOptionBeforeFirstOperandOrOption(\n command,\n optionName,\n value\n );\n }\n return `${command} --${optionName} ${value}`;\n}\n\nfunction insertCliOptionBeforeFirstOperandOrOption(\n command: string,\n optionName: string,\n value: string\n): string {\n if (optionName !== \"profile\") {\n const match = FIRST_CLI_OPERAND_OR_OPTION_RE.exec(command);\n if (!(match?.groups?.commandPath && match.groups.tail)) {\n return `${command} --${optionName} ${value}`;\n }\n return `${match.groups.commandPath} --${optionName} ${value}${match.groups.tail}`;\n }\n\n const tokens = command.trim().split(WHITESPACE_SPLIT_RE);\n const insertionIndex = resolveProfileOptionInsertionIndex(tokens);\n if (insertionIndex === null) {\n return command;\n }\n return [\n ...tokens.slice(0, insertionIndex),\n `--${optionName}`,\n value,\n ...tokens.slice(insertionIndex),\n ].join(\" \");\n}\n\nfunction hasCliOption(command: string, optionName: string): boolean {\n const optionPattern = new RegExp(`(?:^|\\\\s)--${optionName}(?:=|\\\\s|$)`, \"u\");\n return optionPattern.test(command);\n}\n\nfunction resolveProfileOptionInsertionIndex(tokens: string[]): number | null {\n if (tokens[0] !== OPENMELD_CLI_COMMAND) {\n return null;\n }\n const topLevelCommand = tokens[1] ?? \"\";\n if (PROFILE_AWARE_TOP_LEVEL_COMMANDS.has(topLevelCommand)) {\n return 2;\n }\n if (topLevelCommand !== \"space\") {\n return null;\n }\n\n let index = 2;\n while (index < tokens.length) {\n const token = tokens[index] ?? \"\";\n if (SPACE_PARENT_OPTIONS_WITH_VALUE.has(token)) {\n index += 2;\n continue;\n }\n if (\n [...SPACE_PARENT_OPTIONS_WITH_VALUE].some((option) =>\n token.startsWith(`${option}=`)\n )\n ) {\n index += 1;\n continue;\n }\n break;\n }\n\n const spaceCommand = tokens[index] ?? \"\";\n if (!PROFILE_AWARE_SPACE_COMMANDS.has(spaceCommand)) {\n return null;\n }\n return index + 1;\n}\n\nfunction normalizePath(value: string | undefined): string {\n return normalizeText(value).replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nfunction normalizeText(value: string | undefined): string {\n return String(value ?? \"\").trim();\n}\n","import { normalizeBaseUrl } from \"../protocol/urls\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nexport const DEFAULT_AUTH_BASE_URL = \"https://auth.openmeld.ai\";\nexport const DEV_LOCAL_AUTH_BASE_URL = \"http://localhost:8788\";\n\nexport function resolveAuthBaseUrl(\n cliValue?: string,\n input: { env?: NodeJS.ProcessEnv } = {}\n): string {\n const env = input.env ?? process.env;\n const fromCli = String(cliValue ?? \"\").trim();\n if (fromCli) {\n return normalizeBaseUrl(fromCli);\n }\n\n const fromEnv = String(env.OPENMELD_AUTH_URL ?? \"\").trim();\n if (fromEnv) {\n return normalizeBaseUrl(fromEnv);\n }\n\n return normalizeBaseUrl(resolveDefaultAuthBaseUrl(env));\n}\n\nfunction resolveDefaultAuthBaseUrl(env: NodeJS.ProcessEnv): string {\n const preset = resolveOpenMeldEnvPreset({ env });\n if (preset === \"dev-local\" || preset === \"canary\") {\n return DEV_LOCAL_AUTH_BASE_URL;\n }\n return DEFAULT_AUTH_BASE_URL;\n}\n","import process from \"node:process\";\nimport { resolveUserFacingCliEntryCommand } from \"../runtime/cli-entry-command\";\nimport { resolveAuthBaseUrl } from \"./auth-url\";\nimport {\n normalizeGatewayBaseUrl,\n resolveBaseUrl,\n resolveDefaultGatewayBaseUrl,\n} from \"./base-url\";\nimport type { OpenMeldEnvPreset } from \"./paths\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nconst OPENMELD_USER_FACING_CLI_COMMAND_ENV = \"OPENMELD_USER_FACING_CLI_COMMAND\";\n\nexport type OpenMeldEnvironmentTarget = {\n preset: OpenMeldEnvPreset;\n gatewayUrl: string;\n authBaseUrl: string;\n userFacingCommand: string;\n};\n\ntype OpenMeldEnvironmentTargetInput = {\n gatewayUrl?: string;\n authUrl?: string;\n env?: NodeJS.ProcessEnv;\n};\n\nexport async function resolveOpenMeldEnvironmentTarget(\n input: OpenMeldEnvironmentTargetInput = {}\n): Promise<OpenMeldEnvironmentTarget> {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: await resolveBaseUrl(input.gatewayUrl, { env }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nexport function resolveOpenMeldEnvironmentTargetFromEnv(\n input: OpenMeldEnvironmentTargetInput = {}\n): OpenMeldEnvironmentTarget {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: resolveGatewayUrlFromEnvOnly({\n env,\n gatewayUrl: input.gatewayUrl,\n }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nfunction resolveUserFacingCommandForPreset(input: {\n env: NodeJS.ProcessEnv;\n preset: OpenMeldEnvPreset;\n}): string {\n const explicitCommand = normalizeOptionalText(\n input.env[OPENMELD_USER_FACING_CLI_COMMAND_ENV]\n );\n if (explicitCommand) {\n return explicitCommand;\n }\n if (input.preset === \"dev-local\") {\n return \"openmeld-dev\";\n }\n if (input.preset === \"canary\") {\n return \"openmeld-canary\";\n }\n return resolveUserFacingCliEntryCommand({ env: input.env });\n}\n\nfunction resolveGatewayUrlFromEnvOnly(input: {\n env: NodeJS.ProcessEnv;\n gatewayUrl?: string;\n}): string {\n const fromInput = normalizeOptionalText(input.gatewayUrl);\n if (fromInput) {\n return normalizeGatewayBaseUrl(fromInput);\n }\n const fromEnv = normalizeOptionalText(input.env.OPENMELD_GATEWAY_URL);\n if (fromEnv) {\n return normalizeGatewayBaseUrl(fromEnv);\n }\n return normalizeGatewayBaseUrl(\n resolveDefaultGatewayBaseUrl({ env: input.env })\n );\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openmeld-environment-target-BWI2adGw.js","names":["OPENMELD_USER_FACING_CLI_COMMAND_ENV","process","process"],"sources":["../src/runtime/cli-entry-command.ts","../src/config/auth-url.ts","../src/config/openmeld-environment-target.ts"],"sourcesContent":["import process from \"node:process\";\n\nconst OPENMELD_CLI_COMMAND = \"openmeld\";\nconst OPENMELD_CLI_NPX_COMMAND = \"npx -y openmeld@latest\";\nconst OPENMELD_SETUP_FOLLOW_UP_CLI_COMMAND_ENV =\n \"OPENMELD_SETUP_FOLLOW_UP_CLI_COMMAND\";\nconst OPENMELD_USER_FACING_CLI_COMMAND_ENV = \"OPENMELD_USER_FACING_CLI_COMMAND\";\nconst OPENMELD_TOP_LEVEL_COMMANDS = [\n \"adapter\",\n \"agents\",\n \"auth\",\n \"computer\",\n \"daemon\",\n \"doctor\",\n \"help\",\n \"login\",\n \"profile\",\n \"profiles\",\n \"prompt\",\n \"reset\",\n \"send\",\n \"service\",\n \"setup\",\n \"skills\",\n \"space\",\n \"start\",\n \"tail\",\n \"upgrade\",\n \"view\",\n \"whoami\",\n] as const;\nconst OPENMELD_COMMAND_PREFIX_RE = /^openmeld(?=$|\\s)/u;\nconst OPENMELD_COMMAND_LINE_RE =\n /^(?<prefix>\\s*(?:(?:[$*-])\\s+|\\d+\\)\\s+)??)(?<command>openmeld(?=$|\\s).*)$/u;\nconst OPENMELD_COMMAND_AFTER_PIPE_RE =\n /^(?<prefix>.*\\|\\s+)(?<command>openmeld(?=$|\\s).*)$/u;\nconst INLINE_OPENMELD_COMMAND_RE = /`(openmeld(?: [^`]*)?)`/gu;\nconst CLI_OPTION_NAME_RE = /^[a-z][a-z0-9-]*$/u;\nconst FIRST_CLI_OPERAND_OR_OPTION_RE =\n /^(?<commandPath>.*?)(?<tail>\\s+(?:--|<).*)$/u;\nconst INLINE_OPENMELD_TOP_LEVEL_MENTION_RE = new RegExp(\n `\\\\bats (?<command>${OPENMELD_TOP_LEVEL_COMMANDS.join(\"|\")})\\\\b`,\n \"gu\"\n);\nconst NEWLINE_SPLIT_RE = /\\r?\\n/u;\nconst WHITESPACE_SPLIT_RE = /\\s+/u;\nconst PROFILE_AWARE_TOP_LEVEL_COMMANDS = new Set([\"whoami\"]);\nconst PROFILE_AWARE_SPACE_COMMANDS = new Set([\n \"add-me\",\n \"add-agents\",\n \"add-human-profiles\",\n \"add-members\",\n \"contract\",\n \"create\",\n \"delete\",\n \"guide\",\n \"history\",\n \"join\",\n \"leave\",\n \"list\",\n \"password\",\n \"publication\",\n \"remove-members\",\n \"result\",\n \"send\",\n \"status\",\n \"updates\",\n \"watch\",\n]);\nconst SPACE_PARENT_OPTIONS_WITH_VALUE = new Set([\"--gateway-url\"]);\n\ntype CliEntryCommandInput = {\n env?: NodeJS.ProcessEnv;\n argv?: string[];\n};\n\ntype ProfileAwareCliCommandInput = CliEntryCommandInput & {\n profileId?: string | null;\n resolvedView?: \"human\" | \"agent\" | string;\n};\n\nexport function resolveUserFacingCliEntryCommand(\n input: CliEntryCommandInput = {}\n): string {\n const env = input.env ?? process.env;\n const explicitCommand = normalizeText(\n env[OPENMELD_USER_FACING_CLI_COMMAND_ENV]\n );\n if (explicitCommand.length > 0) {\n return explicitCommand;\n }\n return isNpxCliInvocation(input)\n ? OPENMELD_CLI_NPX_COMMAND\n : OPENMELD_CLI_COMMAND;\n}\n\nexport function resolveSetupFollowUpCliEntryCommand(\n input: CliEntryCommandInput = {}\n): string {\n const env = input.env ?? process.env;\n const setupCommand = normalizeText(\n env[OPENMELD_SETUP_FOLLOW_UP_CLI_COMMAND_ENV]\n );\n if (setupCommand.length > 0) {\n return setupCommand;\n }\n return resolveUserFacingCliEntryCommand(input);\n}\n\nexport function formatOpenMeldCliCommand(\n command: string,\n input: CliEntryCommandInput = {}\n): string {\n if (!OPENMELD_COMMAND_PREFIX_RE.test(command)) {\n return command;\n }\n return command.replace(\n OPENMELD_COMMAND_PREFIX_RE,\n resolveUserFacingCliEntryCommand(input)\n );\n}\n\nexport function formatOpenMeldCliCommands(\n commands: string[],\n input: CliEntryCommandInput = {}\n): string[] {\n return commands.map((command) => formatOpenMeldCliLine(command, input));\n}\n\nexport function formatProfileAwareOpenMeldCliCommand(\n command: string,\n input: ProfileAwareCliCommandInput = {}\n): string {\n return formatOpenMeldCliCommand(\n applyProfileAwareCommandScope(command, input),\n input\n );\n}\n\nexport function formatProfileAwareOpenMeldCliCommands(\n commands: string[],\n input: ProfileAwareCliCommandInput = {}\n): string[] {\n return commands.map((command) =>\n formatProfileAwareOpenMeldCliCommand(command, input)\n );\n}\n\nexport function formatInlineOpenMeldCliCommands(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n return text.replace(INLINE_OPENMELD_COMMAND_RE, (_, command: string) => {\n return `\\`${formatOpenMeldCliCommand(command, input)}\\``;\n });\n}\n\nexport function formatOpenMeldCliLine(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n const inlineFormatted = formatInlineOpenMeldCliCommands(text, input);\n const lineMatch = OPENMELD_COMMAND_LINE_RE.exec(inlineFormatted);\n if (lineMatch?.groups?.command) {\n return formatBareOpenMeldCliMentions(\n `${lineMatch.groups.prefix ?? \"\"}${formatOpenMeldCliCommand(\n lineMatch.groups.command,\n input\n )}`,\n input\n );\n }\n\n const pipeMatch = OPENMELD_COMMAND_AFTER_PIPE_RE.exec(inlineFormatted);\n if (pipeMatch?.groups?.command) {\n return formatBareOpenMeldCliMentions(\n `${pipeMatch.groups.prefix}${formatOpenMeldCliCommand(\n pipeMatch.groups.command,\n input\n )}`,\n input\n );\n }\n\n return formatBareOpenMeldCliMentions(inlineFormatted, input);\n}\n\nexport function formatOpenMeldCliTextBlock(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n return text\n .split(NEWLINE_SPLIT_RE)\n .map((line) => formatOpenMeldCliLine(line, input))\n .join(\"\\n\");\n}\n\nfunction isNpxCliInvocation(input: CliEntryCommandInput): boolean {\n const env = input.env ?? process.env;\n const argv = input.argv ?? process.argv;\n const npmCommand = normalizeText(env.npm_command).toLowerCase();\n const npmExecPath = normalizePath(env.npm_execpath);\n const npmUserAgent = normalizeText(env.npm_config_user_agent).toLowerCase();\n const usesNpmExec =\n npmCommand === \"exec\" &&\n npmExecTargetIsOpenMeldCli(env) &&\n (npmUserAgent.startsWith(\"npm/\") ||\n npmExecPath.includes(\"/npm/\") ||\n npmExecPath.endsWith(\"/npm-cli.js\"));\n if (usesNpmExec) {\n return true;\n }\n\n const scriptPath = normalizePath(argv[1]);\n return scriptPath.includes(\"/.npm/\") && scriptPath.includes(\"_npx\");\n}\n\nfunction npmExecTargetIsOpenMeldCli(env: NodeJS.ProcessEnv): boolean {\n // Every descendant of `npm exec` inherits npm_command=exec, so a openmeld\n // process spawned inside e.g. `npx vitest` carries the same env markers as\n // `npx openmeld`. npm records the resolved bin command it executed (quoted)\n // in npm_lifecycle_script; only that target proves openmeld itself was the\n // npx invocation.\n const execTarget = normalizeText(env.npm_lifecycle_script).replaceAll(\n '\"',\n \"\"\n );\n return execTarget === OPENMELD_CLI_COMMAND;\n}\n\nfunction formatBareOpenMeldCliMentions(\n text: string,\n input: CliEntryCommandInput = {}\n): string {\n return text.replace(\n INLINE_OPENMELD_TOP_LEVEL_MENTION_RE,\n (_, command: string) => {\n return formatOpenMeldCliCommand(`openmeld ${command}`, input);\n }\n );\n}\n\nfunction applyProfileAwareCommandScope(\n command: string,\n input: ProfileAwareCliCommandInput\n): string {\n if (!OPENMELD_COMMAND_PREFIX_RE.test(command)) {\n return command;\n }\n\n let scopedCommand = command.trimEnd();\n const profileId = normalizeText(input.profileId ?? undefined);\n if (profileId.length > 0) {\n scopedCommand = appendCliOption(scopedCommand, \"profile\", profileId);\n }\n if (input.resolvedView === \"agent\") {\n scopedCommand = appendCliOption(scopedCommand, \"view\", \"agent\");\n }\n return scopedCommand;\n}\n\nfunction appendCliOption(\n command: string,\n optionName: string,\n value: string\n): string {\n if (\n !CLI_OPTION_NAME_RE.test(optionName) ||\n hasCliOption(command, optionName)\n ) {\n return command;\n }\n if (optionName === \"profile\") {\n return insertCliOptionBeforeFirstOperandOrOption(\n command,\n optionName,\n value\n );\n }\n return `${command} --${optionName} ${value}`;\n}\n\nfunction insertCliOptionBeforeFirstOperandOrOption(\n command: string,\n optionName: string,\n value: string\n): string {\n if (optionName !== \"profile\") {\n const match = FIRST_CLI_OPERAND_OR_OPTION_RE.exec(command);\n if (!(match?.groups?.commandPath && match.groups.tail)) {\n return `${command} --${optionName} ${value}`;\n }\n return `${match.groups.commandPath} --${optionName} ${value}${match.groups.tail}`;\n }\n\n const tokens = command.trim().split(WHITESPACE_SPLIT_RE);\n const insertionIndex = resolveProfileOptionInsertionIndex(tokens);\n if (insertionIndex === null) {\n return command;\n }\n return [\n ...tokens.slice(0, insertionIndex),\n `--${optionName}`,\n value,\n ...tokens.slice(insertionIndex),\n ].join(\" \");\n}\n\nfunction hasCliOption(command: string, optionName: string): boolean {\n const optionPattern = new RegExp(`(?:^|\\\\s)--${optionName}(?:=|\\\\s|$)`, \"u\");\n return optionPattern.test(command);\n}\n\nfunction resolveProfileOptionInsertionIndex(tokens: string[]): number | null {\n if (tokens[0] !== OPENMELD_CLI_COMMAND) {\n return null;\n }\n const topLevelCommand = tokens[1] ?? \"\";\n if (PROFILE_AWARE_TOP_LEVEL_COMMANDS.has(topLevelCommand)) {\n return 2;\n }\n if (topLevelCommand !== \"space\") {\n return null;\n }\n\n let index = 2;\n while (index < tokens.length) {\n const token = tokens[index] ?? \"\";\n if (SPACE_PARENT_OPTIONS_WITH_VALUE.has(token)) {\n index += 2;\n continue;\n }\n if (\n [...SPACE_PARENT_OPTIONS_WITH_VALUE].some((option) =>\n token.startsWith(`${option}=`)\n )\n ) {\n index += 1;\n continue;\n }\n break;\n }\n\n const spaceCommand = tokens[index] ?? \"\";\n if (!PROFILE_AWARE_SPACE_COMMANDS.has(spaceCommand)) {\n return null;\n }\n return index + 1;\n}\n\nfunction normalizePath(value: string | undefined): string {\n return normalizeText(value).replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nfunction normalizeText(value: string | undefined): string {\n return String(value ?? \"\").trim();\n}\n","import { normalizeBaseUrl } from \"../protocol/urls\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nexport const DEFAULT_AUTH_BASE_URL = \"https://auth.openmeld.ai\";\nexport const DEV_LOCAL_AUTH_BASE_URL = \"http://localhost:8788\";\n\nexport function resolveAuthBaseUrl(\n cliValue?: string,\n input: { env?: NodeJS.ProcessEnv } = {}\n): string {\n const env = input.env ?? process.env;\n const fromCli = String(cliValue ?? \"\").trim();\n if (fromCli) {\n return normalizeBaseUrl(fromCli);\n }\n\n const fromEnv = String(env.OPENMELD_AUTH_URL ?? \"\").trim();\n if (fromEnv) {\n return normalizeBaseUrl(fromEnv);\n }\n\n return normalizeBaseUrl(resolveDefaultAuthBaseUrl(env));\n}\n\nfunction resolveDefaultAuthBaseUrl(env: NodeJS.ProcessEnv): string {\n const preset = resolveOpenMeldEnvPreset({ env });\n if (preset === \"dev-local\" || preset === \"canary\") {\n return DEV_LOCAL_AUTH_BASE_URL;\n }\n return DEFAULT_AUTH_BASE_URL;\n}\n","import process from \"node:process\";\nimport { resolveUserFacingCliEntryCommand } from \"../runtime/cli-entry-command\";\nimport { resolveAuthBaseUrl } from \"./auth-url\";\nimport {\n normalizeGatewayBaseUrl,\n resolveBaseUrl,\n resolveDefaultGatewayBaseUrl,\n} from \"./base-url\";\nimport type { OpenMeldEnvPreset } from \"./paths\";\nimport { resolveOpenMeldEnvPreset } from \"./paths\";\n\nconst OPENMELD_USER_FACING_CLI_COMMAND_ENV = \"OPENMELD_USER_FACING_CLI_COMMAND\";\n\nexport type OpenMeldEnvironmentTarget = {\n preset: OpenMeldEnvPreset;\n gatewayUrl: string;\n authBaseUrl: string;\n userFacingCommand: string;\n};\n\ntype OpenMeldEnvironmentTargetInput = {\n gatewayUrl?: string;\n authUrl?: string;\n env?: NodeJS.ProcessEnv;\n};\n\nexport async function resolveOpenMeldEnvironmentTarget(\n input: OpenMeldEnvironmentTargetInput = {}\n): Promise<OpenMeldEnvironmentTarget> {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: await resolveBaseUrl(input.gatewayUrl, { env }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nexport function resolveOpenMeldEnvironmentTargetFromEnv(\n input: OpenMeldEnvironmentTargetInput = {}\n): OpenMeldEnvironmentTarget {\n const env = input.env ?? process.env;\n const preset = resolveOpenMeldEnvPreset({ env });\n return {\n preset,\n gatewayUrl: resolveGatewayUrlFromEnvOnly({\n env,\n gatewayUrl: input.gatewayUrl,\n }),\n authBaseUrl: resolveAuthBaseUrl(input.authUrl, { env }),\n userFacingCommand: resolveUserFacingCommandForPreset({ env, preset }),\n };\n}\n\nfunction resolveUserFacingCommandForPreset(input: {\n env: NodeJS.ProcessEnv;\n preset: OpenMeldEnvPreset;\n}): string {\n const explicitCommand = normalizeOptionalText(\n input.env[OPENMELD_USER_FACING_CLI_COMMAND_ENV]\n );\n if (explicitCommand) {\n return explicitCommand;\n }\n if (input.preset === \"dev-local\") {\n return \"openmeld-dev\";\n }\n if (input.preset === \"canary\") {\n return \"openmeld-canary\";\n }\n return resolveUserFacingCliEntryCommand({ env: input.env });\n}\n\nfunction resolveGatewayUrlFromEnvOnly(input: {\n env: NodeJS.ProcessEnv;\n gatewayUrl?: string;\n}): string {\n const fromInput = normalizeOptionalText(input.gatewayUrl);\n if (fromInput) {\n return normalizeGatewayBaseUrl(fromInput);\n }\n const fromEnv = normalizeOptionalText(input.env.OPENMELD_GATEWAY_URL);\n if (fromEnv) {\n return normalizeGatewayBaseUrl(fromEnv);\n }\n return normalizeGatewayBaseUrl(\n resolveDefaultGatewayBaseUrl({ env: input.env })\n );\n}\n\nfunction normalizeOptionalText(value: unknown): string | null {\n const normalized = String(value ?? \"\").trim();\n return normalized.length > 0 ? normalized : null;\n}\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-Dxp6o_t_.js";
4
- import { Bn as resolveSkillsAgentRegistry, Tt as readOpenMeldToolsMaintenancePolicy, kt as prepareDaemonServiceUpdateWorkerCarrier, n as scheduleDaemonServiceUpdate, t as runPendingDaemonServiceUpdate, wt as readPendingOpenMeldToolsUpdateAttempt, xt as createOpenMeldToolsUpdateCoordinator } from "./daemon-service-update-coordinator-DcjOzGu1.js";
5
- import { b as withSkillsInstallLock, f as ensureLocalSkills, h as downloadOfficialSkillUpdate, l as installSkillsToTargets, s as resolveTrackedInstallTargets } from "./installation-inventory-B0cbVLun.js";
6
- import { Vt as readDaemonServiceContract, g as assertDaemonMaintenanceInstallationOwnership, it as completePendingDaemonServiceUpdate, nt as OPENMELD_VERSION, st as readPendingDaemonServiceUpdate, yt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-CWTlAhZY.js";
7
- import { g as getConfiguredSkillsConfig } from "./base-url-C6sHRNGu.js";
8
- import { W as withDaemonServiceReconcileLock } from "./daemon-state-C37ZtIZK.js";
9
- import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-GiMCiTmu.js";
3
+ import { a as isOpenMeldOrphanedLockError, d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock } from "./lock-CAt9uTnZ.js";
4
+ import { Bn as resolveSkillsAgentRegistry, Tt as readOpenMeldToolsMaintenancePolicy, kt as prepareDaemonServiceUpdateWorkerCarrier, n as scheduleDaemonServiceUpdate, t as runPendingDaemonServiceUpdate, wt as readPendingOpenMeldToolsUpdateAttempt, xt as createOpenMeldToolsUpdateCoordinator } from "./daemon-service-update-coordinator--xLHNqDT.js";
5
+ import { b as withSkillsInstallLock, f as ensureLocalSkills, h as downloadOfficialSkillUpdate, l as installSkillsToTargets, s as resolveTrackedInstallTargets } from "./installation-inventory-C4WKcVEj.js";
6
+ import { Vt as readDaemonServiceContract, g as assertDaemonMaintenanceInstallationOwnership, it as completePendingDaemonServiceUpdate, nt as OPENMELD_VERSION, st as readPendingDaemonServiceUpdate, yt as configureDaemonMaintenanceEnvironment } from "./daemon-service-runtime-CGT3yVOs.js";
7
+ import { g as getConfiguredSkillsConfig } from "./base-url-BczddvzH.js";
8
+ import { W as withDaemonServiceReconcileLock } from "./daemon-state-CoAZLwpi.js";
9
+ import { S as resolveDaemonServiceManager, v as readDaemonServiceStartupPolicyCurrent } from "./daemon-service-manager-DxS5eH_N.js";
10
10
  //#region src/skills/maintenance.ts
11
11
  async function maintainOfficialCliSkill() {
12
12
  if (await downloadOfficialSkillUpdate().catch((error) => {
@@ -70,7 +70,7 @@ async function runMaintenancePass() {
70
70
  }
71
71
  const result = await runPendingDaemonServiceUpdate();
72
72
  if (result?.phase === "updated") {
73
- const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-BqdhIAjT.js");
73
+ const { finishComputerSetupAfterBackgroundUpdate, recoverComputerSetupAfterBackgroundUpdate } = await import("./computer-setup-continuation-CN383Vvy.js");
74
74
  await prepareDaemonServiceUpdateWorkerCarrier(result);
75
75
  await finishComputerSetupAfterBackgroundUpdate();
76
76
  await withDaemonServiceReconcileLock(async () => {
@@ -99,4 +99,4 @@ async function reconcileCurrentServiceStartupPolicy(updatesCurrent) {
99
99
  //#endregion
100
100
  export { runOpenMeldMaintenanceWorker };
101
101
 
102
- //# sourceMappingURL=openmeld-maintenance-worker-DtY_H7Bv.js.map
102
+ //# sourceMappingURL=openmeld-maintenance-worker-Blfu_oOo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-maintenance-worker-DtY_H7Bv.js","names":[],"sources":["../src/skills/maintenance.ts","../src/local-service/maintenance/openmeld-maintenance-worker.ts"],"sourcesContent":["import { getConfiguredSkillsConfig } from \"../config/runtime-config\";\nimport { resolveSkillsAgentRegistry } from \"./agents\";\nimport { resolveTrackedInstallTargets } from \"./installation-inventory\";\nimport { installSkillsToTargets, withSkillsInstallLock } from \"./installer\";\nimport { downloadOfficialSkillUpdate } from \"./official-release\";\nimport { ensureLocalSkills } from \"./store\";\n\nexport async function maintainOfficialCliSkill(): Promise<void> {\n const outcome = await downloadOfficialSkillUpdate().catch(\n (error: unknown) => {\n process.stderr.write(\n `[openmeld] Skill download deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n return \"deferred\" as const;\n }\n );\n if (outcome === \"lane_isolated\") {\n return;\n }\n await withSkillsInstallLock(async () => {\n const localSkills = await ensureLocalSkills();\n const skillsConfig = await getConfiguredSkillsConfig();\n const targets = await resolveTrackedInstallTargets({\n skillsConfig,\n registry: resolveSkillsAgentRegistry(skillsConfig),\n localSkills,\n onlyOpenMeldInstalledTargets: false,\n });\n const results = await installSkillsToTargets({\n skills: localSkills,\n targets,\n });\n const failures = results.filter((result) => result.status === \"failed\");\n if (failures.length) {\n throw new Error(\n failures\n .map((result) => `${result.targetId}: ${result.reason}`)\n .join(\"; \")\n );\n }\n });\n}\n","import { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { configureDaemonMaintenanceEnvironment } from \"../../config/daemon-service-update-worker-registration\";\nimport { withDaemonServiceReconcileLock } from \"../../config/daemon-state\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../../config/lock\";\nimport { OPENMELD_VERSION } from \"../../runtime/version\";\nimport { maintainOfficialCliSkill } from \"../../skills/maintenance\";\nimport {\n readDaemonServiceStartupPolicyCurrent,\n resolveDaemonServiceManager,\n} from \"../lifecycle/daemon-service-manager\";\nimport { assertDaemonMaintenanceInstallationOwnership } from \"../lifecycle/daemon-service-manager-command-match\";\nimport {\n runPendingDaemonServiceUpdate,\n scheduleDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-coordinator\";\nimport {\n completePendingDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport { prepareDaemonServiceUpdateWorkerCarrier } from \"../lifecycle/daemon-service-update-worker-manager\";\nimport { readOpenMeldToolsMaintenancePolicy } from \"./openmeld-tools-maintenance-policy\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"./openmeld-tools-update-coordinator\";\n\n// The OS owns this process. It is also the sole executor of persisted download\n// attempts; Service requests only publish an attempt and wake this worker.\nexport async function runOpenMeldMaintenanceWorker(): Promise<void> {\n configureDaemonMaintenanceEnvironment(process.env);\n await runMaintenanceWithLock();\n}\n\nasync function runMaintenanceWithLock(): Promise<boolean> {\n try {\n const lock = await acquireLock({\n openMeldProfileId: \"__system__\",\n key: \"maintenance-worker\",\n });\n return await runWithHeldLock({\n lock,\n run: runMaintenancePass,\n releaseContext: { component: \"maintenance_worker\" },\n });\n } catch (error) {\n // Setup/repair may still own the lifecycle lock when the OS first runs us.\n // Leave its state intact; the existing OS trigger will run another pass.\n if (isOpenMeldLockError(error) && !isOpenMeldOrphanedLockError(error)) {\n return false;\n }\n throw error;\n }\n}\n\nasync function runMaintenancePass(): Promise<boolean> {\n const pendingJob = await readPendingDaemonServiceUpdate();\n const pendingAttempt = await readPendingOpenMeldToolsUpdateAttempt();\n if (!(pendingJob || pendingAttempt)) {\n const contract = await readDaemonServiceContract();\n if (!contract || contract.desiredState !== \"background\") {\n return false;\n }\n }\n await assertDaemonMaintenanceInstallationOwnership();\n if ((await readOpenMeldToolsMaintenancePolicy()).automaticUpdatesEnabled) {\n try {\n await maintainOfficialCliSkill();\n } catch (error) {\n process.stderr.write(\n `[openmeld] Skill maintenance deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n }\n }\n const coordinator = createOpenMeldToolsUpdateCoordinator();\n if (!pendingJob) {\n if (pendingAttempt) {\n await coordinator.resumePendingUpdate();\n } else {\n const update = await coordinator.requestUpdate({\n requestSource: \"automatic\",\n });\n await reconcileCurrentServiceStartupPolicy(update.status === \"current\");\n }\n await coordinator.waitForIdle();\n }\n const result = await runPendingDaemonServiceUpdate();\n if (result?.phase === \"updated\") {\n const {\n finishComputerSetupAfterBackgroundUpdate,\n recoverComputerSetupAfterBackgroundUpdate,\n } = await import(\"../../commands/computer-setup-continuation\");\n // Only a verified replacement may replace the working recovery carrier.\n await prepareDaemonServiceUpdateWorkerCarrier(result);\n await finishComputerSetupAfterBackgroundUpdate();\n await withDaemonServiceReconcileLock(async () => {\n const current = await readPendingDaemonServiceUpdate();\n if (\n current?.jobId === result.jobId &&\n current.phase === \"updated\" &&\n current.targetVersion === result.targetVersion\n ) {\n await completePendingDaemonServiceUpdate(current);\n }\n });\n await recoverComputerSetupAfterBackgroundUpdate();\n return true;\n }\n if (result?.phase === \"restored\" || result?.phase === \"needs_help\") {\n process.exitCode = 1;\n }\n return false;\n}\n\nasync function reconcileCurrentServiceStartupPolicy(\n updatesCurrent: boolean\n): Promise<void> {\n if (!updatesCurrent) {\n return;\n }\n const contract = await readDaemonServiceContract();\n // An older recovery worker must not apply its policy to a newer Service,\n // and maintenance must preserve an explicit user stop.\n if (\n contract?.desiredState !== \"background\" ||\n contract.daemonVersion !== OPENMELD_VERSION\n ) {\n return;\n }\n const manager = await resolveDaemonServiceManager();\n if (\n (await readDaemonServiceStartupPolicyCurrent({\n controller: manager?.controller ?? null,\n status: (await manager?.status()) ?? null,\n })) === false\n ) {\n await scheduleDaemonServiceUpdate({\n targetVersion: contract.daemonVersion,\n urgency: \"available\",\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openmeld-maintenance-worker-Blfu_oOo.js","names":[],"sources":["../src/skills/maintenance.ts","../src/local-service/maintenance/openmeld-maintenance-worker.ts"],"sourcesContent":["import { getConfiguredSkillsConfig } from \"../config/runtime-config\";\nimport { resolveSkillsAgentRegistry } from \"./agents\";\nimport { resolveTrackedInstallTargets } from \"./installation-inventory\";\nimport { installSkillsToTargets, withSkillsInstallLock } from \"./installer\";\nimport { downloadOfficialSkillUpdate } from \"./official-release\";\nimport { ensureLocalSkills } from \"./store\";\n\nexport async function maintainOfficialCliSkill(): Promise<void> {\n const outcome = await downloadOfficialSkillUpdate().catch(\n (error: unknown) => {\n process.stderr.write(\n `[openmeld] Skill download deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n return \"deferred\" as const;\n }\n );\n if (outcome === \"lane_isolated\") {\n return;\n }\n await withSkillsInstallLock(async () => {\n const localSkills = await ensureLocalSkills();\n const skillsConfig = await getConfiguredSkillsConfig();\n const targets = await resolveTrackedInstallTargets({\n skillsConfig,\n registry: resolveSkillsAgentRegistry(skillsConfig),\n localSkills,\n onlyOpenMeldInstalledTargets: false,\n });\n const results = await installSkillsToTargets({\n skills: localSkills,\n targets,\n });\n const failures = results.filter((result) => result.status === \"failed\");\n if (failures.length) {\n throw new Error(\n failures\n .map((result) => `${result.targetId}: ${result.reason}`)\n .join(\"; \")\n );\n }\n });\n}\n","import { readDaemonServiceContract } from \"../../config/daemon-service-contract\";\nimport { configureDaemonMaintenanceEnvironment } from \"../../config/daemon-service-update-worker-registration\";\nimport { withDaemonServiceReconcileLock } from \"../../config/daemon-state\";\nimport {\n acquireLock,\n isOpenMeldLockError,\n isOpenMeldOrphanedLockError,\n runWithHeldLock,\n} from \"../../config/lock\";\nimport { OPENMELD_VERSION } from \"../../runtime/version\";\nimport { maintainOfficialCliSkill } from \"../../skills/maintenance\";\nimport {\n readDaemonServiceStartupPolicyCurrent,\n resolveDaemonServiceManager,\n} from \"../lifecycle/daemon-service-manager\";\nimport { assertDaemonMaintenanceInstallationOwnership } from \"../lifecycle/daemon-service-manager-command-match\";\nimport {\n runPendingDaemonServiceUpdate,\n scheduleDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-coordinator\";\nimport {\n completePendingDaemonServiceUpdate,\n readPendingDaemonServiceUpdate,\n} from \"../lifecycle/daemon-service-update-state\";\nimport { prepareDaemonServiceUpdateWorkerCarrier } from \"../lifecycle/daemon-service-update-worker-manager\";\nimport { readOpenMeldToolsMaintenancePolicy } from \"./openmeld-tools-maintenance-policy\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { createOpenMeldToolsUpdateCoordinator } from \"./openmeld-tools-update-coordinator\";\n\n// The OS owns this process. It is also the sole executor of persisted download\n// attempts; Service requests only publish an attempt and wake this worker.\nexport async function runOpenMeldMaintenanceWorker(): Promise<void> {\n configureDaemonMaintenanceEnvironment(process.env);\n await runMaintenanceWithLock();\n}\n\nasync function runMaintenanceWithLock(): Promise<boolean> {\n try {\n const lock = await acquireLock({\n openMeldProfileId: \"__system__\",\n key: \"maintenance-worker\",\n });\n return await runWithHeldLock({\n lock,\n run: runMaintenancePass,\n releaseContext: { component: \"maintenance_worker\" },\n });\n } catch (error) {\n // Setup/repair may still own the lifecycle lock when the OS first runs us.\n // Leave its state intact; the existing OS trigger will run another pass.\n if (isOpenMeldLockError(error) && !isOpenMeldOrphanedLockError(error)) {\n return false;\n }\n throw error;\n }\n}\n\nasync function runMaintenancePass(): Promise<boolean> {\n const pendingJob = await readPendingDaemonServiceUpdate();\n const pendingAttempt = await readPendingOpenMeldToolsUpdateAttempt();\n if (!(pendingJob || pendingAttempt)) {\n const contract = await readDaemonServiceContract();\n if (!contract || contract.desiredState !== \"background\") {\n return false;\n }\n }\n await assertDaemonMaintenanceInstallationOwnership();\n if ((await readOpenMeldToolsMaintenancePolicy()).automaticUpdatesEnabled) {\n try {\n await maintainOfficialCliSkill();\n } catch (error) {\n process.stderr.write(\n `[openmeld] Skill maintenance deferred: ${error instanceof Error ? error.message : String(error)}\\n`\n );\n }\n }\n const coordinator = createOpenMeldToolsUpdateCoordinator();\n if (!pendingJob) {\n if (pendingAttempt) {\n await coordinator.resumePendingUpdate();\n } else {\n const update = await coordinator.requestUpdate({\n requestSource: \"automatic\",\n });\n await reconcileCurrentServiceStartupPolicy(update.status === \"current\");\n }\n await coordinator.waitForIdle();\n }\n const result = await runPendingDaemonServiceUpdate();\n if (result?.phase === \"updated\") {\n const {\n finishComputerSetupAfterBackgroundUpdate,\n recoverComputerSetupAfterBackgroundUpdate,\n } = await import(\"../../commands/computer-setup-continuation\");\n // Only a verified replacement may replace the working recovery carrier.\n await prepareDaemonServiceUpdateWorkerCarrier(result);\n await finishComputerSetupAfterBackgroundUpdate();\n await withDaemonServiceReconcileLock(async () => {\n const current = await readPendingDaemonServiceUpdate();\n if (\n current?.jobId === result.jobId &&\n current.phase === \"updated\" &&\n current.targetVersion === result.targetVersion\n ) {\n await completePendingDaemonServiceUpdate(current);\n }\n });\n await recoverComputerSetupAfterBackgroundUpdate();\n return true;\n }\n if (result?.phase === \"restored\" || result?.phase === \"needs_help\") {\n process.exitCode = 1;\n }\n return false;\n}\n\nasync function reconcileCurrentServiceStartupPolicy(\n updatesCurrent: boolean\n): Promise<void> {\n if (!updatesCurrent) {\n return;\n }\n const contract = await readDaemonServiceContract();\n // An older recovery worker must not apply its policy to a newer Service,\n // and maintenance must preserve an explicit user stop.\n if (\n contract?.desiredState !== \"background\" ||\n contract.daemonVersion !== OPENMELD_VERSION\n ) {\n return;\n }\n const manager = await resolveDaemonServiceManager();\n if (\n (await readDaemonServiceStartupPolicyCurrent({\n controller: manager?.controller ?? null,\n status: (await manager?.status()) ?? null,\n })) === false\n ) {\n await scheduleDaemonServiceUpdate({\n targetVersion: contract.daemonVersion,\n urgency: \"available\",\n });\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { wt as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator-DcjOzGu1.js";
4
- import { st as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-CWTlAhZY.js";
5
- import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-iFOSSUJo.js";
3
+ import { wt as readPendingOpenMeldToolsUpdateAttempt } from "./daemon-service-update-coordinator--xLHNqDT.js";
4
+ import { st as readPendingDaemonServiceUpdate } from "./daemon-service-runtime-CGT3yVOs.js";
5
+ import { m as resolveOpenMeldToolsUpdateOperation } from "./elapsed-time-CCFWbCC8.js";
6
6
  import { setTimeout } from "node:timers/promises";
7
7
  //#region src/local-service/maintenance/openmeld-tools-update-join.ts
8
8
  const DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;
@@ -29,6 +29,8 @@ async function resolveExternalOpenMeldToolsUpdate(input = {}) {
29
29
  phase: serviceJob.phase,
30
30
  requestSource: serviceJob.requestSource,
31
31
  requestedAt: serviceJob.requestedAt,
32
+ ...serviceJob.targetCliVersion ? { targetCliVersion: serviceJob.targetCliVersion } : {},
33
+ ...serviceJob.targetServiceVersion ? { targetServiceVersion: serviceJob.targetServiceVersion } : {},
32
34
  targetVersion: serviceJob.targetVersion,
33
35
  updatedAt: serviceJob.updatedAt,
34
36
  urgency: serviceJob.urgency
@@ -51,4 +53,4 @@ async function waitForExternalOpenMeldToolsUpdate(input = {}) {
51
53
  //#endregion
52
54
  export { waitForExternalOpenMeldToolsUpdate as n, waitForOpenMeldToolsUpdateCompletion as r, resolveExternalOpenMeldToolsUpdate as t };
53
55
 
54
- //# sourceMappingURL=openmeld-tools-update-join-DS_EIL5q.js.map
56
+ //# sourceMappingURL=openmeld-tools-update-join-BpLwmowQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-join-DS_EIL5q.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import { setTimeout as sleep } from \"node:timers/promises\";\nimport type { OpenMeldToolsUpdateOperation } from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (reportedOperationId !== operation.operationId) {\n reportedOperationId = operation.operationId;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAMI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;CACF,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAOI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,wBAAwB,UAAU,aAAa;GACjD,sBAAsB,UAAU;GAChC,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF"}
1
+ {"version":3,"file":"openmeld-tools-update-join-BpLwmowQ.js","names":["sleep"],"sources":["../src/local-service/maintenance/openmeld-tools-update-join.ts"],"sourcesContent":["import { setTimeout as sleep } from \"node:timers/promises\";\nimport type { OpenMeldToolsUpdateOperation } from \"@openmeld/schemas/types\";\nimport type { OpenMeldPathResolutionInput } from \"../../config/paths\";\nimport { readPendingDaemonServiceUpdate } from \"../lifecycle/daemon-service-update-state\";\nimport { readPendingOpenMeldToolsUpdateAttempt } from \"./openmeld-tools-update-attempt-state\";\nimport { resolveOpenMeldToolsUpdateOperation } from \"./openmeld-tools-update-operation\";\n\nconst DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS = 500;\n\n// This is an observer of the existing durable operation, never an updater.\n// The OS-owned worker continues even if this caller exits while waiting.\nexport async function waitForOpenMeldToolsUpdateCompletion(\n input: {\n operationId?: string;\n pollIntervalMs?: number;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n let operationId = input.operationId ?? null;\n await waitForExternalOpenMeldToolsUpdate({\n completedServiceUpdateIsIdle: true,\n pollIntervalMs: input.pollIntervalMs,\n onWaiting: async (operation) => {\n if (operationId !== null && operationId !== operation.operationId) {\n throw new Error(\n `OpenMeld update ${operationId} was replaced before its completion could be verified.`\n );\n }\n operationId = operation.operationId;\n await input.onWaiting?.(operation);\n },\n });\n const completed = await resolveOpenMeldToolsUpdateOperation();\n if (\n operationId !== null &&\n (completed?.operationId !== operationId || completed.phase !== \"updated\")\n ) {\n throw new Error(\n `OpenMeld update ${operationId} did not finish successfully (${completed?.phase ?? \"completion evidence unavailable\"}).`\n );\n }\n return completed;\n}\n\nexport async function resolveExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n } = {}\n): Promise<OpenMeldToolsUpdateOperation | null> {\n // The coordinator persists the Service job before discarding the tools\n // attempt. Reading in this order prevents observers from seeing a false idle\n // gap while ownership moves from the CLI download to the Service worker.\n const toolsAttempt = await readPendingOpenMeldToolsUpdateAttempt(input);\n const serviceJob = await readPendingDaemonServiceUpdate(input);\n if (\n serviceJob &&\n serviceJob.jobId !== (input.currentOperationId ?? null) &&\n !(input.completedServiceUpdateIsIdle && serviceJob.phase === \"updated\")\n ) {\n return {\n operationId: serviceJob.jobId,\n phase: serviceJob.phase,\n requestSource: serviceJob.requestSource,\n requestedAt: serviceJob.requestedAt,\n ...(serviceJob.targetCliVersion\n ? { targetCliVersion: serviceJob.targetCliVersion }\n : {}),\n ...(serviceJob.targetServiceVersion\n ? { targetServiceVersion: serviceJob.targetServiceVersion }\n : {}),\n targetVersion: serviceJob.targetVersion,\n updatedAt: serviceJob.updatedAt,\n urgency: serviceJob.urgency,\n };\n }\n if (\n toolsAttempt &&\n toolsAttempt.operation.operationId !== (input.currentOperationId ?? null)\n ) {\n return toolsAttempt.operation;\n }\n return null;\n}\n\nexport async function waitForExternalOpenMeldToolsUpdate(\n input: OpenMeldPathResolutionInput & {\n currentOperationId?: string | null;\n completedServiceUpdateIsIdle?: boolean;\n onWaiting?: (\n operation: OpenMeldToolsUpdateOperation\n ) => Promise<void> | void;\n pollIntervalMs?: number;\n } = {}\n): Promise<void> {\n let reportedOperationId: string | null = null;\n while (true) {\n const operation = await resolveExternalOpenMeldToolsUpdate(input);\n if (!operation) {\n return;\n }\n if (reportedOperationId !== operation.operationId) {\n reportedOperationId = operation.operationId;\n await input.onWaiting?.(operation);\n }\n await sleep(\n Math.max(1, input.pollIntervalMs ?? DEFAULT_UPDATE_JOIN_POLL_INTERVAL_MS)\n );\n }\n}\n"],"mappings":";;;;;;;AAOA,MAAM,uCAAuC;AAI7C,eAAsB,qCACpB,QAMI,CAAC,GACyC;CAC9C,IAAI,cAAc,MAAM,eAAe;CACvC,MAAM,mCAAmC;EACvC,8BAA8B;EAC9B,gBAAgB,MAAM;EACtB,WAAW,OAAO,cAAc;GAC9B,IAAI,gBAAgB,QAAQ,gBAAgB,UAAU,aACpD,MAAM,IAAI,MACR,mBAAmB,YAAY,uDACjC;GAEF,cAAc,UAAU;GACxB,MAAM,MAAM,YAAY,SAAS;EACnC;CACF,CAAC;CACD,MAAM,YAAY,MAAM,oCAAoC;CAC5D,IACE,gBAAgB,SACf,WAAW,gBAAgB,eAAe,UAAU,UAAU,YAE/D,MAAM,IAAI,MACR,mBAAmB,YAAY,gCAAgC,WAAW,SAAS,kCAAkC,GACvH;CAEF,OAAO;AACT;AAEA,eAAsB,mCACpB,QAGI,CAAC,GACyC;CAI9C,MAAM,eAAe,MAAM,sCAAsC,KAAK;CACtE,MAAM,aAAa,MAAM,+BAA+B,KAAK;CAC7D,IACE,cACA,WAAW,WAAW,MAAM,sBAAsB,SAClD,EAAE,MAAM,gCAAgC,WAAW,UAAU,YAE7D,OAAO;EACL,aAAa,WAAW;EACxB,OAAO,WAAW;EAClB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,GAAI,WAAW,mBACX,EAAE,kBAAkB,WAAW,iBAAiB,IAChD,CAAC;EACL,GAAI,WAAW,uBACX,EAAE,sBAAsB,WAAW,qBAAqB,IACxD,CAAC;EACL,eAAe,WAAW;EAC1B,WAAW,WAAW;EACtB,SAAS,WAAW;CACtB;CAEF,IACE,gBACA,aAAa,UAAU,iBAAiB,MAAM,sBAAsB,OAEpE,OAAO,aAAa;CAEtB,OAAO;AACT;AAEA,eAAsB,mCACpB,QAOI,CAAC,GACU;CACf,IAAI,sBAAqC;CACzC,OAAO,MAAM;EACX,MAAM,YAAY,MAAM,mCAAmC,KAAK;EAChE,IAAI,CAAC,WACH;EAEF,IAAI,wBAAwB,UAAU,aAAa;GACjD,sBAAsB,UAAU;GAChC,MAAM,MAAM,YAAY,SAAS;EACnC;EACA,MAAMA,WACJ,KAAK,IAAI,GAAG,MAAM,kBAAkB,oCAAoC,CAC1E;CACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { S as openMeldToolsUpdateProcessFailureFrameSchema, t as OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS, y as openMeldToolsUpdateFailureCodeSchema } from "./local-components-H3SkJMC1.js";
3
+ import { S as openMeldToolsUpdateProcessFailureFrameSchema, t as OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS, y as openMeldToolsUpdateFailureCodeSchema } from "./local-components-B6SCXZf9.js";
4
4
  import { n as toErrorMessage } from "./dist-o3UL1EGQ.js";
5
5
  //#region src/local-service/maintenance/openmeld-tools-update-failure.ts
6
6
  const PERSISTED_FAILURE_PREFIX = "openmeld.tools.update.failure=";
@@ -90,4 +90,4 @@ function truncateText(value, maxChars, side = "head") {
90
90
  //#endregion
91
91
  export { encodePersistedOpenMeldToolsUpdateFailure as a, withOpenMeldToolsUpdateFailure as c, OpenMeldToolsUpdateFailureError as i, emitOpenMeldToolsUpdateFailureFrame as n, resolveOpenMeldToolsUpdateFailure as o, parseOpenMeldToolsUpdateFailureFrame as r, resolvePersistedOpenMeldToolsUpdateFailure as s, appendBoundedOpenMeldToolsUpdateProcessOutput as t };
92
92
 
93
- //# sourceMappingURL=openmeld-tools-update-process-frame-CbZPpc7D.js.map
93
+ //# sourceMappingURL=openmeld-tools-update-process-frame-0X-t0Kjv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openmeld-tools-update-process-frame-CbZPpc7D.js","names":["LINE_SPLIT_RE"],"sources":["../src/local-service/maintenance/openmeld-tools-update-failure.ts","../src/local-service/maintenance/openmeld-tools-update-process-frame.ts"],"sourcesContent":["import { openMeldToolsUpdateFailureCodeSchema } from \"@openmeld/schemas\";\nimport type { OpenMeldToolsUpdateFailureCode } from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\n\nconst PERSISTED_FAILURE_PREFIX = \"openmeld.tools.update.failure=\";\nconst INTERNAL_FAILURE_PREFIX = \"openmeld.tools.update.\";\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport class OpenMeldToolsUpdateFailureError extends Error {\n readonly failureCode: OpenMeldToolsUpdateFailureCode;\n\n constructor(input: {\n cause?: unknown;\n failureCode: OpenMeldToolsUpdateFailureCode;\n message: string;\n }) {\n super(\n input.message,\n input.cause === undefined ? undefined : { cause: input.cause }\n );\n this.name = \"OpenMeldToolsUpdateFailureError\";\n this.failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n }\n}\n\nexport function withOpenMeldToolsUpdateFailure(\n error: unknown,\n fallbackCode: OpenMeldToolsUpdateFailureCode\n): OpenMeldToolsUpdateFailureError {\n const existing = resolveOpenMeldToolsUpdateFailure(error);\n if (error instanceof OpenMeldToolsUpdateFailureError && existing) {\n return error;\n }\n return new OpenMeldToolsUpdateFailureError({\n cause: error,\n failureCode: existing ?? fallbackCode,\n message: toErrorMessage(error),\n });\n}\n\nexport function resolveOpenMeldToolsUpdateFailure(\n error: unknown\n): OpenMeldToolsUpdateFailureCode | null {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n const direct = openMeldToolsUpdateFailureCodeSchema.safeParse(\n (current as { failureCode?: unknown }).failureCode\n );\n if (direct.success) {\n return direct.data;\n }\n const internalCode = (current as { code?: unknown }).code;\n if (typeof internalCode === \"string\") {\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n internalCode.startsWith(INTERNAL_FAILURE_PREFIX)\n ? `cli.update.${internalCode.slice(INTERNAL_FAILURE_PREFIX.length)}`\n : internalCode\n );\n if (parsed.success) {\n return parsed.data;\n }\n }\n current = (current as { cause?: unknown }).cause;\n }\n return null;\n}\n\nexport function encodePersistedOpenMeldToolsUpdateFailure(input: {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n}): string {\n const failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n const detail = input.detail.trim();\n return `${PERSISTED_FAILURE_PREFIX}${failureCode}${\n detail ? `\\n${detail}` : \"\"\n }`;\n}\n\nexport function resolvePersistedOpenMeldToolsUpdateFailure(\n errorMessage: string | null\n): OpenMeldToolsUpdateFailureCode | null {\n if (!errorMessage?.startsWith(PERSISTED_FAILURE_PREFIX)) {\n return null;\n }\n const firstLine = errorMessage.split(LINE_SPLIT_RE, 1)[0] ?? \"\";\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n firstLine.slice(PERSISTED_FAILURE_PREFIX.length)\n );\n return parsed.success ? parsed.data : null;\n}\n","import {\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS,\n openMeldToolsUpdateProcessFailureFrameSchema,\n} from \"@openmeld/schemas\";\nimport type {\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateProcessFailureFrame,\n} from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\nimport { resolveOpenMeldToolsUpdateFailure } from \"./openmeld-tools-update-failure\";\n\nconst FAILURE_FRAME_OUTPUT_MAX_CHARS = 64 * 1024;\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport type OpenMeldToolsUpdateProcessFailure = {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n};\n\nexport function emitOpenMeldToolsUpdateFailureFrame(error: unknown): void {\n const detail = truncateText(\n toErrorMessage(error),\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS\n );\n const frame: OpenMeldToolsUpdateProcessFailureFrame =\n openMeldToolsUpdateProcessFailureFrameSchema.parse({\n detail: detail || \"OpenMeld update process failed.\",\n failureCode:\n resolveOpenMeldToolsUpdateFailure(error) ?? \"cli.update.failed\",\n schema: \"openmeld-tools-update-process-failure-v1\",\n v: 1,\n });\n // The leading newline keeps the frame parseable even when prior presenter\n // output ended mid-line.\n process.stdout.write(`\\n${JSON.stringify(frame)}\\n`);\n}\n\nexport function appendBoundedOpenMeldToolsUpdateProcessOutput(\n current: string,\n chunk: string\n): string {\n return truncateText(\n `${current}${chunk}`,\n FAILURE_FRAME_OUTPUT_MAX_CHARS,\n \"tail\"\n );\n}\n\nexport function parseOpenMeldToolsUpdateFailureFrame(\n output: string\n): OpenMeldToolsUpdateProcessFailure | null {\n const lines = output.split(LINE_SPLIT_RE);\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n const line = lines[index]?.trim();\n if (!line?.startsWith(\"{\")) {\n continue;\n }\n try {\n const parsed = openMeldToolsUpdateProcessFailureFrameSchema.safeParse(\n JSON.parse(line) as unknown\n );\n if (parsed.success) {\n return {\n detail: parsed.data.detail,\n failureCode: parsed.data.failureCode,\n };\n }\n } catch {\n // Other agent-view output and truncated lines are not update frames.\n }\n }\n return null;\n}\n\nfunction truncateText(\n value: string,\n maxChars: number,\n side: \"head\" | \"tail\" = \"head\"\n): string {\n if (value.length <= maxChars) {\n return value;\n }\n if (side === \"tail\") {\n return value.slice(-maxChars);\n }\n const suffix = \"…\";\n return value.slice(0, Math.max(0, maxChars - suffix.length)) + suffix;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"openmeld-tools-update-process-frame-0X-t0Kjv.js","names":["LINE_SPLIT_RE"],"sources":["../src/local-service/maintenance/openmeld-tools-update-failure.ts","../src/local-service/maintenance/openmeld-tools-update-process-frame.ts"],"sourcesContent":["import { openMeldToolsUpdateFailureCodeSchema } from \"@openmeld/schemas\";\nimport type { OpenMeldToolsUpdateFailureCode } from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\n\nconst PERSISTED_FAILURE_PREFIX = \"openmeld.tools.update.failure=\";\nconst INTERNAL_FAILURE_PREFIX = \"openmeld.tools.update.\";\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport class OpenMeldToolsUpdateFailureError extends Error {\n readonly failureCode: OpenMeldToolsUpdateFailureCode;\n\n constructor(input: {\n cause?: unknown;\n failureCode: OpenMeldToolsUpdateFailureCode;\n message: string;\n }) {\n super(\n input.message,\n input.cause === undefined ? undefined : { cause: input.cause }\n );\n this.name = \"OpenMeldToolsUpdateFailureError\";\n this.failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n }\n}\n\nexport function withOpenMeldToolsUpdateFailure(\n error: unknown,\n fallbackCode: OpenMeldToolsUpdateFailureCode\n): OpenMeldToolsUpdateFailureError {\n const existing = resolveOpenMeldToolsUpdateFailure(error);\n if (error instanceof OpenMeldToolsUpdateFailureError && existing) {\n return error;\n }\n return new OpenMeldToolsUpdateFailureError({\n cause: error,\n failureCode: existing ?? fallbackCode,\n message: toErrorMessage(error),\n });\n}\n\nexport function resolveOpenMeldToolsUpdateFailure(\n error: unknown\n): OpenMeldToolsUpdateFailureCode | null {\n const seen = new Set<unknown>();\n let current: unknown = error;\n while (current && typeof current === \"object\" && !seen.has(current)) {\n seen.add(current);\n const direct = openMeldToolsUpdateFailureCodeSchema.safeParse(\n (current as { failureCode?: unknown }).failureCode\n );\n if (direct.success) {\n return direct.data;\n }\n const internalCode = (current as { code?: unknown }).code;\n if (typeof internalCode === \"string\") {\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n internalCode.startsWith(INTERNAL_FAILURE_PREFIX)\n ? `cli.update.${internalCode.slice(INTERNAL_FAILURE_PREFIX.length)}`\n : internalCode\n );\n if (parsed.success) {\n return parsed.data;\n }\n }\n current = (current as { cause?: unknown }).cause;\n }\n return null;\n}\n\nexport function encodePersistedOpenMeldToolsUpdateFailure(input: {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n}): string {\n const failureCode = openMeldToolsUpdateFailureCodeSchema.parse(\n input.failureCode\n );\n const detail = input.detail.trim();\n return `${PERSISTED_FAILURE_PREFIX}${failureCode}${\n detail ? `\\n${detail}` : \"\"\n }`;\n}\n\nexport function resolvePersistedOpenMeldToolsUpdateFailure(\n errorMessage: string | null\n): OpenMeldToolsUpdateFailureCode | null {\n if (!errorMessage?.startsWith(PERSISTED_FAILURE_PREFIX)) {\n return null;\n }\n const firstLine = errorMessage.split(LINE_SPLIT_RE, 1)[0] ?? \"\";\n const parsed = openMeldToolsUpdateFailureCodeSchema.safeParse(\n firstLine.slice(PERSISTED_FAILURE_PREFIX.length)\n );\n return parsed.success ? parsed.data : null;\n}\n","import {\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS,\n openMeldToolsUpdateProcessFailureFrameSchema,\n} from \"@openmeld/schemas\";\nimport type {\n OpenMeldToolsUpdateFailureCode,\n OpenMeldToolsUpdateProcessFailureFrame,\n} from \"@openmeld/schemas/types\";\nimport { toErrorMessage } from \"@openmeld/utils\";\nimport { resolveOpenMeldToolsUpdateFailure } from \"./openmeld-tools-update-failure\";\n\nconst FAILURE_FRAME_OUTPUT_MAX_CHARS = 64 * 1024;\nconst LINE_SPLIT_RE = /\\r?\\n/u;\n\nexport type OpenMeldToolsUpdateProcessFailure = {\n detail: string;\n failureCode: OpenMeldToolsUpdateFailureCode;\n};\n\nexport function emitOpenMeldToolsUpdateFailureFrame(error: unknown): void {\n const detail = truncateText(\n toErrorMessage(error),\n OPEN_MELD_TOOLS_UPDATE_FAILURE_DETAIL_MAX_CHARS\n );\n const frame: OpenMeldToolsUpdateProcessFailureFrame =\n openMeldToolsUpdateProcessFailureFrameSchema.parse({\n detail: detail || \"OpenMeld update process failed.\",\n failureCode:\n resolveOpenMeldToolsUpdateFailure(error) ?? \"cli.update.failed\",\n schema: \"openmeld-tools-update-process-failure-v1\",\n v: 1,\n });\n // The leading newline keeps the frame parseable even when prior presenter\n // output ended mid-line.\n process.stdout.write(`\\n${JSON.stringify(frame)}\\n`);\n}\n\nexport function appendBoundedOpenMeldToolsUpdateProcessOutput(\n current: string,\n chunk: string\n): string {\n return truncateText(\n `${current}${chunk}`,\n FAILURE_FRAME_OUTPUT_MAX_CHARS,\n \"tail\"\n );\n}\n\nexport function parseOpenMeldToolsUpdateFailureFrame(\n output: string\n): OpenMeldToolsUpdateProcessFailure | null {\n const lines = output.split(LINE_SPLIT_RE);\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n const line = lines[index]?.trim();\n if (!line?.startsWith(\"{\")) {\n continue;\n }\n try {\n const parsed = openMeldToolsUpdateProcessFailureFrameSchema.safeParse(\n JSON.parse(line) as unknown\n );\n if (parsed.success) {\n return {\n detail: parsed.data.detail,\n failureCode: parsed.data.failureCode,\n };\n }\n } catch {\n // Other agent-view output and truncated lines are not update frames.\n }\n }\n return null;\n}\n\nfunction truncateText(\n value: string,\n maxChars: number,\n side: \"head\" | \"tail\" = \"head\"\n): string {\n if (value.length <= maxChars) {\n return value;\n }\n if (side === \"tail\") {\n return value.slice(-maxChars);\n }\n const suffix = \"…\";\n return value.slice(0, Math.max(0, maxChars - suffix.length)) + suffix;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { n as emitOpenMeldToolsUpdateFailureFrame } from "./openmeld-tools-update-process-frame-CbZPpc7D.js";
3
+ import { n as emitOpenMeldToolsUpdateFailureFrame } from "./openmeld-tools-update-process-frame-0X-t0Kjv.js";
4
4
  export { emitOpenMeldToolsUpdateFailureFrame };
package/dist/openmeld.js CHANGED
@@ -3,24 +3,24 @@
3
3
  //#region src/openmeld-entry.ts
4
4
  const args = process.argv.slice(2);
5
5
  if (args.length === 2 && args[0] === "service" && args[1] === "update-worker") try {
6
- const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-DtY_H7Bv.js");
6
+ const { runOpenMeldMaintenanceWorker } = await import("./openmeld-maintenance-worker-Blfu_oOo.js");
7
7
  await runOpenMeldMaintenanceWorker();
8
8
  } catch (error) {
9
9
  console.error("[openmeld.maintenance.failed]", error);
10
10
  process.exitCode = 1;
11
11
  }
12
12
  else if (args.length === 1 && (args[0] === "maintenance-upgrade" || args[0] === "maintenance-align-service")) try {
13
- const { runMaintenanceUpgrade } = await import("./upgrade-DKXu-1wO.js");
13
+ const { runMaintenanceUpgrade } = await import("./upgrade-EWdIdoHm.js");
14
14
  await runMaintenanceUpgrade(args[0] === "maintenance-align-service");
15
15
  } catch (error) {
16
16
  try {
17
- const { emitOpenMeldToolsUpdateFailureFrame } = await import("./openmeld-tools-update-process-frame-CcPLrSsw.js");
17
+ const { emitOpenMeldToolsUpdateFailureFrame } = await import("./openmeld-tools-update-process-frame-DX1Dc8VI.js");
18
18
  emitOpenMeldToolsUpdateFailureFrame(error);
19
19
  } catch {}
20
20
  console.error("[openmeld.maintenance.upgrade_failed]", error);
21
21
  process.exitCode = 1;
22
22
  }
23
- else await import("./openmeld-B4gQCCex.js");
23
+ else await import("./openmeld-DpV9lAF-.js");
24
24
  //#endregion
25
25
  export {};
26
26