@xopcai/xopc 0.0.89 → 0.0.91

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 (267) hide show
  1. package/README.md +36 -12
  2. package/README.zh-CN.md +36 -12
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +41 -0
  6. package/dist/gateway/static/root/assets/agents-bVWUlrlD.js +222 -0
  7. package/dist/gateway/static/root/assets/apps-page-CIC8bmvZ.js +1 -0
  8. package/dist/gateway/static/root/assets/{attachment-preview-renderer-CpyoFbs4.js → attachment-preview-renderer-DBAxQXb-.js} +2 -2
  9. package/dist/gateway/static/root/assets/{attachment-process-heavy-CqVriadb.js → attachment-process-heavy-Csq3TrrP.js} +4 -4
  10. package/dist/gateway/static/root/assets/channels-settings-C8G8RAAP.js +1 -0
  11. package/dist/gateway/static/root/assets/{channels-status-swr-DaHGkRF1.js → channels-status-swr-CYWL5DLD.js} +1 -1
  12. package/dist/gateway/static/root/assets/circle-check-C23XjkUj.js +1 -0
  13. package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +1 -0
  14. package/dist/gateway/static/root/assets/cron-api-TVqLlGAC.js +1 -0
  15. package/dist/gateway/static/root/assets/cron-dreaming-jobs-Ip703-qM.js +2 -0
  16. package/dist/gateway/static/root/assets/cron-page-BtcFYlvv.js +1 -0
  17. package/dist/gateway/static/root/assets/dist-CUV1uY5f.js +1 -0
  18. package/dist/gateway/static/root/assets/{extension-debug-page-CtuKJ9tE.js → extension-debug-page-mTLHRDp1.js} +1 -1
  19. package/dist/gateway/static/root/assets/{extension-page-ykzjOkR5.js → extension-page-iI8BI7WK.js} +1 -1
  20. package/dist/gateway/static/root/assets/{extension-settings-page-Ce2qrdpO.js → extension-settings-page-ByXcdubM.js} +1 -1
  21. package/dist/gateway/static/root/assets/{fetch-C9FFJjuH.js → fetch-BWtQq_Ys.js} +1 -1
  22. package/dist/gateway/static/root/assets/{field-primitives-BFcrNeTU.js → field-primitives-BsZ-4VT5.js} +1 -1
  23. package/dist/gateway/static/root/assets/{heartbeat-config-api-CEg4Vr9R.js → heartbeat-config-api-WjTsRLCU.js} +1 -1
  24. package/dist/gateway/static/root/assets/{index-CZfy9oxs.js → index-CKkR-v9U.js} +101 -97
  25. package/dist/gateway/static/root/assets/index-VlELBY99.css +1 -0
  26. package/dist/gateway/static/root/assets/logs-page-ClnIpxfd.js +1 -0
  27. package/dist/gateway/static/root/assets/note-detail-page-B91pLkEI.css +1 -0
  28. package/dist/gateway/static/root/assets/note-detail-page-DJ2Mb4x7.js +179 -0
  29. package/dist/gateway/static/root/assets/note-time-JLBPSLzK.js +1 -0
  30. package/dist/gateway/static/root/assets/notes-page-BE-75qz9.js +1 -0
  31. package/dist/gateway/static/root/assets/{pdf-BnEvgIXZ.js → pdf-epILhEOn.js} +1 -1
  32. package/dist/gateway/static/root/assets/preload-helper-zJ_50EbN.js +1 -0
  33. package/dist/gateway/static/root/assets/sessions-page-bJJkWtTl.js +1 -0
  34. package/dist/gateway/static/root/assets/{settings-form-section-BqdzA28u.js → settings-form-section-DSYCknxM.js} +1 -1
  35. package/dist/gateway/static/root/assets/settings-page-WcMXLq2U.js +3 -0
  36. package/dist/gateway/static/root/assets/share-preview-page-awRqs4hV.js +2 -0
  37. package/dist/gateway/static/root/assets/skills-page-Lu-i1JG7.js +2 -0
  38. package/dist/gateway/static/root/assets/{theme-store-CNqbmTNV.js → theme-store-BC-42BoZ.js} +1 -1
  39. package/dist/gateway/static/root/assets/toast-z0toXu32.js +1 -0
  40. package/dist/gateway/static/root/assets/url-CY1RQKTU.js +3 -0
  41. package/dist/gateway/static/root/assets/{utils-BWm2tG2w.js → utils-DX3TQuap.js} +1 -1
  42. package/dist/gateway/static/root/assets/vendor-codemirror-DYoKfS8f.js +45 -0
  43. package/dist/gateway/static/root/assets/voice-api-key-field-B5uKlDqA.js +1 -0
  44. package/dist/gateway/static/root/assets/workflow-page.utils-ClC37yEp.js +1 -0
  45. package/dist/gateway/static/root/assets/workflows-page-C7VhIXtR.js +27 -0
  46. package/dist/gateway/static/root/index.html +11 -7
  47. package/dist/package.js +1 -1
  48. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +20 -18
  49. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -1
  50. package/dist/src/agent/tools/cronjob-tool.d.ts +6 -0
  51. package/dist/src/agent/tools/cronjob-tool.js +74 -9
  52. package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
  53. package/dist/src/agent/tools/edit.d.ts +5 -1
  54. package/dist/src/agent/tools/edit.js +7 -5
  55. package/dist/src/agent/tools/edit.js.map +1 -1
  56. package/dist/src/agent/tools/factory.js +2 -2
  57. package/dist/src/agent/tools/factory.js.map +1 -1
  58. package/dist/src/agent/tools/write.d.ts +5 -1
  59. package/dist/src/agent/tools/write.js +7 -5
  60. package/dist/src/agent/tools/write.js.map +1 -1
  61. package/dist/src/agent/workflow/agent-progress.js +2 -0
  62. package/dist/src/agent/workflow/agent-progress.js.map +1 -1
  63. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +12 -0
  64. package/dist/src/agent/workflow/builtins/client-proposal.js +155 -0
  65. package/dist/src/agent/workflow/builtins/client-proposal.js.map +1 -0
  66. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +12 -0
  67. package/dist/src/agent/workflow/builtins/competitor-scan.js +150 -0
  68. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +1 -0
  69. package/dist/src/agent/workflow/builtins/content-draft.d.ts +13 -0
  70. package/dist/src/agent/workflow/builtins/content-draft.js +146 -0
  71. package/dist/src/agent/workflow/builtins/content-draft.js.map +1 -0
  72. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +11 -0
  73. package/dist/src/agent/workflow/builtins/content-repurpose.js +137 -0
  74. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +1 -0
  75. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +13 -0
  76. package/dist/src/agent/workflow/builtins/decision-compare.js +173 -0
  77. package/dist/src/agent/workflow/builtins/decision-compare.js.map +1 -0
  78. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +11 -0
  79. package/dist/src/agent/workflow/builtins/inbox-triage.js +148 -0
  80. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +1 -0
  81. package/dist/src/agent/workflow/builtins/index.d.ts +10 -1
  82. package/dist/src/agent/workflow/builtins/index.js +46 -1
  83. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  84. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +12 -0
  85. package/dist/src/agent/workflow/builtins/meeting-prep.js +144 -0
  86. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +1 -0
  87. package/dist/src/agent/workflow/builtins/offer-design.d.ts +12 -0
  88. package/dist/src/agent/workflow/builtins/offer-design.js +161 -0
  89. package/dist/src/agent/workflow/builtins/offer-design.js.map +1 -0
  90. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +12 -0
  91. package/dist/src/agent/workflow/builtins/weekly-review.js +131 -0
  92. package/dist/src/agent/workflow/builtins/weekly-review.js.map +1 -0
  93. package/dist/src/agent/workflow/step-labels.js +2 -2
  94. package/dist/src/agent/workflow/step-labels.js.map +1 -1
  95. package/dist/src/agent/workflow/subagent-runner.js +3 -1
  96. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  97. package/dist/src/agent/workflow/types.d.ts +4 -0
  98. package/dist/src/chat-commands/agent-edit.d.ts +4 -0
  99. package/dist/src/chat-commands/agent-edit.js +136 -0
  100. package/dist/src/chat-commands/agent-edit.js.map +1 -0
  101. package/dist/src/chat-commands/index.d.ts +1 -0
  102. package/dist/src/chat-commands/index.js +3 -1
  103. package/dist/src/chat-commands/index.js.map +1 -1
  104. package/dist/src/cli/bin.js +2 -0
  105. package/dist/src/cli/bin.js.map +1 -1
  106. package/dist/src/cli/commands/cron.js +42 -3
  107. package/dist/src/cli/commands/cron.js.map +1 -1
  108. package/dist/src/cli/commands/doctor/checks/session-integrity.js +79 -56
  109. package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +1 -1
  110. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  111. package/dist/src/cli/commands/update.js +86 -79
  112. package/dist/src/cli/commands/update.js.map +1 -1
  113. package/dist/src/commands/agents.config.d.ts +3 -2
  114. package/dist/src/commands/agents.config.js +5 -2
  115. package/dist/src/commands/agents.config.js.map +1 -1
  116. package/dist/src/config/agent-typed-models.d.ts +2 -7
  117. package/dist/src/config/agent-typed-models.js +3 -14
  118. package/dist/src/config/agent-typed-models.js.map +1 -1
  119. package/dist/src/config/localized-text.d.ts +6 -0
  120. package/dist/src/config/localized-text.js +42 -0
  121. package/dist/src/config/localized-text.js.map +1 -0
  122. package/dist/src/config/models-json.d.ts +6 -6
  123. package/dist/src/config/schema.d.ts +6 -21
  124. package/dist/src/config/schema.js +4 -4
  125. package/dist/src/config/schema.js.map +1 -1
  126. package/dist/src/cron/executor.d.ts +2 -0
  127. package/dist/src/cron/executor.js +111 -1
  128. package/dist/src/cron/executor.js.map +1 -1
  129. package/dist/src/cron/types.d.ts +8 -1
  130. package/dist/src/cron/validation.d.ts +4 -0
  131. package/dist/src/cron/validation.js +4 -3
  132. package/dist/src/cron/validation.js.map +1 -1
  133. package/dist/src/cron/workflow-run-completion.d.ts +23 -0
  134. package/dist/src/cron/workflow-run-completion.js +72 -0
  135. package/dist/src/cron/workflow-run-completion.js.map +1 -0
  136. package/dist/src/extensions/update.d.ts +51 -0
  137. package/dist/src/extensions/update.js +260 -0
  138. package/dist/src/extensions/update.js.map +1 -0
  139. package/dist/src/gateway/agents-admin.d.ts +15 -8
  140. package/dist/src/gateway/agents-admin.js +77 -28
  141. package/dist/src/gateway/agents-admin.js.map +1 -1
  142. package/dist/src/gateway/heartbeat/service.js +1 -1
  143. package/dist/src/gateway/hono/lib/config-payload.d.ts +6 -0
  144. package/dist/src/gateway/hono/lib/config-payload.js +3 -1
  145. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  146. package/dist/src/gateway/hono/middleware/auth.d.ts +2 -0
  147. package/dist/src/gateway/hono/middleware/auth.js +11 -7
  148. package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
  149. package/dist/src/gateway/hono/routes/agents.js +55 -12
  150. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  151. package/dist/src/gateway/hono/routes/config-patch/agents.js +1 -1
  152. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
  153. package/dist/src/gateway/hono/routes/config-patch/gateway.js +12 -0
  154. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -1
  155. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  156. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  157. package/dist/src/gateway/hono/routes/notes.d.ts +3 -0
  158. package/dist/src/gateway/hono/routes/notes.js +274 -0
  159. package/dist/src/gateway/hono/routes/notes.js.map +1 -0
  160. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  161. package/dist/src/gateway/hono/routes/update.js +55 -107
  162. package/dist/src/gateway/hono/routes/update.js.map +1 -1
  163. package/dist/src/gateway/hono/routes/workflows.js +3 -1
  164. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  165. package/dist/src/gateway/server.js +2 -0
  166. package/dist/src/gateway/server.js.map +1 -1
  167. package/dist/src/gateway/service.d.ts +3 -0
  168. package/dist/src/gateway/service.js +12 -1
  169. package/dist/src/gateway/service.js.map +1 -1
  170. package/dist/src/gateway/workspace-ripgrep.d.ts +6 -0
  171. package/dist/src/gateway/workspace-ripgrep.js +62 -11
  172. package/dist/src/gateway/workspace-ripgrep.js.map +1 -1
  173. package/dist/src/heartbeat/index.js +1 -1
  174. package/dist/src/infra/brew.d.ts +4 -0
  175. package/dist/src/infra/brew.js +20 -0
  176. package/dist/src/infra/brew.js.map +1 -0
  177. package/dist/src/infra/package-json.d.ts +2 -0
  178. package/dist/src/infra/package-json.js +23 -0
  179. package/dist/src/infra/package-json.js.map +1 -0
  180. package/dist/src/infra/package-update-steps.d.ts +35 -0
  181. package/dist/src/infra/package-update-steps.js +304 -0
  182. package/dist/src/infra/package-update-steps.js.map +1 -0
  183. package/dist/src/infra/path-env.d.ts +11 -0
  184. package/dist/src/infra/path-env.js +90 -0
  185. package/dist/src/infra/path-env.js.map +1 -0
  186. package/dist/src/infra/path-prepend.d.ts +7 -0
  187. package/dist/src/infra/path-prepend.js +44 -0
  188. package/dist/src/infra/path-prepend.js.map +1 -0
  189. package/dist/src/infra/stable-node-path.d.ts +2 -0
  190. package/dist/src/infra/stable-node-path.js +28 -0
  191. package/dist/src/infra/stable-node-path.js.map +1 -0
  192. package/dist/src/infra/update-global.d.ts +30 -23
  193. package/dist/src/infra/update-global.js +113 -64
  194. package/dist/src/infra/update-global.js.map +1 -1
  195. package/dist/src/infra/update-log.d.ts +1 -0
  196. package/dist/src/infra/update-log.js +12 -0
  197. package/dist/src/infra/update-log.js.map +1 -0
  198. package/dist/src/infra/update-restart.d.ts +20 -0
  199. package/dist/src/infra/update-restart.js +165 -0
  200. package/dist/src/infra/update-restart.js.map +1 -0
  201. package/dist/src/infra/update-runner.d.ts +89 -1
  202. package/dist/src/infra/update-runner.js +604 -173
  203. package/dist/src/infra/update-runner.js.map +1 -1
  204. package/dist/src/infra/update-startup.d.ts +3 -0
  205. package/dist/src/infra/update-startup.js +8 -4
  206. package/dist/src/infra/update-startup.js.map +1 -1
  207. package/dist/src/notes/attachment-ref.d.ts +9 -0
  208. package/dist/src/notes/attachment-ref.js +27 -0
  209. package/dist/src/notes/attachment-ref.js.map +1 -0
  210. package/dist/src/notes/index.d.ts +4 -0
  211. package/dist/src/notes/index.js +4 -0
  212. package/dist/src/notes/note-attachment-sync.d.ts +7 -0
  213. package/dist/src/notes/note-attachment-sync.js +46 -0
  214. package/dist/src/notes/note-attachment-sync.js.map +1 -0
  215. package/dist/src/notes/note-index-meta.d.ts +14 -0
  216. package/dist/src/notes/note-index-meta.js +87 -0
  217. package/dist/src/notes/note-index-meta.js.map +1 -0
  218. package/dist/src/notes/paths.d.ts +5 -0
  219. package/dist/src/notes/paths.js +23 -0
  220. package/dist/src/notes/paths.js.map +1 -0
  221. package/dist/src/notes/service.d.ts +42 -0
  222. package/dist/src/notes/service.js +331 -0
  223. package/dist/src/notes/service.js.map +1 -0
  224. package/dist/src/notes/store.d.ts +33 -0
  225. package/dist/src/notes/store.js +317 -0
  226. package/dist/src/notes/store.js.map +1 -0
  227. package/dist/src/notes/types.d.ts +162 -0
  228. package/dist/src/notes/types.js +1 -0
  229. package/dist/src/routing/resolve-route.d.ts +3 -1
  230. package/dist/src/routing/resolve-route.js.map +1 -1
  231. package/dist/src/session/store.d.ts +5 -3
  232. package/dist/src/session/store.js +66 -20
  233. package/dist/src/session/store.js.map +1 -1
  234. package/dist/src/utils/logger/stats.d.ts +1 -1
  235. package/dist/src/workflows/domain/event.d.ts +3 -0
  236. package/dist/src/workflows/domain/run.d.ts +3 -0
  237. package/dist/src/workflows/domain/run.js.map +1 -1
  238. package/dist/src/workflows/engine/projector.js +17 -0
  239. package/dist/src/workflows/engine/projector.js.map +1 -1
  240. package/dist/src/workflows/engine/workflow-engine.js +127 -0
  241. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  242. package/dist/src/workflows/index.js +1 -1
  243. package/dist/src/workflows/service/run-view-to-snapshot.js +3 -1
  244. package/dist/src/workflows/service/run-view-to-snapshot.js.map +1 -1
  245. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  246. package/dist/src/workflows/service/workflow-run-service.js +4 -1
  247. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  248. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  249. package/package.json +1 -1
  250. package/dist/gateway/static/root/assets/agents-B6PJB07W.js +0 -222
  251. package/dist/gateway/static/root/assets/apps-page-BOr0B1wv.js +0 -1
  252. package/dist/gateway/static/root/assets/channels-settings-BelUKggl.js +0 -1
  253. package/dist/gateway/static/root/assets/cron-api-CjOg-BIj.js +0 -1
  254. package/dist/gateway/static/root/assets/cron-dreaming-jobs-DueM3rBz.js +0 -2
  255. package/dist/gateway/static/root/assets/cron-page-DhoZmZXb.js +0 -1
  256. package/dist/gateway/static/root/assets/dist-6LecgDx5.js +0 -1
  257. package/dist/gateway/static/root/assets/dist-BTWC-BTN.js +0 -45
  258. package/dist/gateway/static/root/assets/index-CiN1cQiQ.css +0 -1
  259. package/dist/gateway/static/root/assets/logs-page-BwWLfqvd.js +0 -1
  260. package/dist/gateway/static/root/assets/sessions-page-DV5WN8uk.js +0 -1
  261. package/dist/gateway/static/root/assets/settings-page-CfOBRbPX.js +0 -3
  262. package/dist/gateway/static/root/assets/share-preview-page-Di5Bzh4g.js +0 -2
  263. package/dist/gateway/static/root/assets/skills-page-D0H5Kaxg.js +0 -2
  264. package/dist/gateway/static/root/assets/url-aYn-Rj1C.js +0 -7
  265. package/dist/gateway/static/root/assets/vendor-codemirror-D0yxdRpg.js +0 -58
  266. package/dist/gateway/static/root/assets/voice-api-key-field-X2UfnHeq.js +0 -1
  267. package/dist/gateway/static/root/assets/workflows-page-BOPpO3NG.js +0 -27
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-restart.js","names":[],"sources":["../../../src/infra/update-restart.ts"],"sourcesContent":["/**\n * Gateway restart after xopc update — daemon, unmanaged, or in-process respawn.\n */\n\nimport { loadConfig } from '../config/loader.js';\nimport { resolveConfigPath } from '../config/paths.js';\nimport { isRestartEnabled } from '../config/commands.flags.js';\nimport { resolveGatewayService } from '../daemon/service.js';\nimport type { GatewayService } from '../daemon/types.js';\nimport {\n findVerifiedGatewayListenerPidsOnPortSync,\n signalVerifiedGatewayPidSync,\n} from './gateway-processes.js';\nimport { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from './restart.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('UpdateRestart');\n\nconst DEFAULT_HEALTH_ATTEMPTS = 120;\nconst DEFAULT_HEALTH_DELAY_MS = 500;\n\nexport type UpdateRestartResult = {\n ok: boolean;\n mode: 'in-process' | 'daemon' | 'unmanaged' | 'skipped' | 'disabled' | 'failed';\n message?: string;\n};\n\nexport type InProcessRestartTrigger = () => { ok: boolean; mode?: string; message?: string };\n\nexport function isRunningInsideGatewayService(\n env: Record<string, string | undefined> = process.env,\n): boolean {\n return env.XOPC_SERVICE_MARKER?.trim() === '1';\n}\n\nfunction resolveGatewayPort(configPath?: string): number {\n const config = loadConfig(configPath ?? resolveConfigPath());\n return typeof config.gateway?.port === 'number' ? config.gateway.port : 18790;\n}\n\nfunction parsePortFromArgs(programArguments: string[] | undefined): number | null {\n if (!programArguments?.length) {\n return null;\n }\n for (let i = 0; i < programArguments.length; i += 1) {\n const arg = programArguments[i];\n if (arg === '--port') {\n const parsed = parseInt(String(programArguments[i + 1]), 10);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n if (arg?.startsWith('--port=')) {\n const parsed = parseInt(arg.split('=', 2)[1] ?? '', 10);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n }\n return null;\n}\n\nasync function resolveRestartPort(service: GatewayService): Promise<number> {\n const command = await service.readCommand(process.env).catch(() => null);\n return parsePortFromArgs(command?.programArguments) ?? resolveGatewayPort();\n}\n\nasync function waitForGatewayHealth(port: number, expectedVersion?: string): Promise<boolean> {\n for (let attempt = 0; attempt < DEFAULT_HEALTH_ATTEMPTS; attempt += 1) {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 1500);\n const response = await fetch(`http://127.0.0.1:${port}/api/health`, {\n method: 'GET',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n if (!response.ok) {\n await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));\n continue;\n }\n if (expectedVersion) {\n const body = (await response.json()) as { version?: string };\n if (body.version && body.version !== expectedVersion) {\n await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));\n continue;\n }\n }\n return true;\n } catch {\n await new Promise((r) => setTimeout(r, DEFAULT_HEALTH_DELAY_MS));\n }\n }\n return false;\n}\n\nasync function restartUnmanagedGateway(port: number, configPath?: string): Promise<UpdateRestartResult> {\n const config = loadConfig(configPath ?? resolveConfigPath());\n if (!isRestartEnabled(config)) {\n return {\n ok: false,\n mode: 'disabled',\n message:\n 'Gateway restart is disabled in config (commands.restart=false). Restart manually: xopc gateway restart',\n };\n }\n\n const pids = findVerifiedGatewayListenerPidsOnPortSync(port).filter(\n (pid): pid is number => Number.isFinite(pid) && pid > 0,\n );\n if (pids.length === 0) {\n return {\n ok: false,\n mode: 'failed',\n message: `No gateway listener found on port ${port}.`,\n };\n }\n if (pids.length > 1) {\n return {\n ok: false,\n mode: 'failed',\n message: `Multiple gateway processes on port ${port}; use \"xopc gateway status\" before retrying.`,\n };\n }\n\n const targetPid = pids[0];\n if (process.platform === 'win32') {\n writeGatewayRestartIntentSync({ targetPid });\n signalVerifiedGatewayPidSync(targetPid, 'SIGTERM');\n } else {\n authorizeGatewaySigusr1Restart();\n signalVerifiedGatewayPidSync(targetPid, 'SIGUSR1');\n }\n\n return {\n ok: true,\n mode: 'unmanaged',\n message: `Gateway restart signal sent to process ${targetPid} on port ${port}.`,\n };\n}\n\nasync function restartDaemonGateway(\n service: GatewayService,\n port: number,\n expectedVersion?: string,\n): Promise<UpdateRestartResult> {\n try {\n const loaded = await service.isLoaded({ env: process.env });\n if (!loaded) {\n return restartUnmanagedGateway(port);\n }\n await service.restart({ env: process.env, stdout: process.stdout });\n const healthy = await waitForGatewayHealth(port, expectedVersion);\n if (!healthy) {\n log.warn({ port, expectedVersion }, 'Gateway restart completed but health check timed out');\n return {\n ok: true,\n mode: 'daemon',\n message: 'Gateway service restarted; health check timed out (gateway may still be starting).',\n };\n }\n return {\n ok: true,\n mode: 'daemon',\n message: 'Gateway service restarted successfully.',\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn({ err, port }, `Daemon restart failed: ${message}`);\n return { ok: false, mode: 'failed', message };\n }\n}\n\nexport async function maybeRestartGatewayAfterUpdate(params: {\n shouldRestart?: boolean;\n expectedVersion?: string;\n configPath?: string;\n triggerInProcessRestart?: InProcessRestartTrigger;\n}): Promise<UpdateRestartResult> {\n if (params.shouldRestart === false) {\n return { ok: true, mode: 'skipped', message: 'Restart skipped (--no-restart).' };\n }\n\n const config = loadConfig(params.configPath ?? resolveConfigPath());\n if (!isRestartEnabled(config)) {\n return {\n ok: false,\n mode: 'disabled',\n message:\n 'Gateway restart is disabled (commands.restart=false). Restart manually: xopc gateway restart',\n };\n }\n\n if (isRunningInsideGatewayService() && params.triggerInProcessRestart) {\n const result = params.triggerInProcessRestart();\n if (!result.ok) {\n return {\n ok: false,\n mode: 'failed',\n message: result.message ?? 'In-process gateway restart failed.',\n };\n }\n log.info({ mode: result.mode }, 'Scheduled in-process gateway restart after update');\n return {\n ok: true,\n mode: 'in-process',\n message: result.message ?? 'Gateway restart scheduled.',\n };\n }\n\n const service = await resolveGatewayService();\n const port = await resolveRestartPort(service);\n return restartDaemonGateway(service, port, params.expectedVersion);\n}\n"],"mappings":"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"}
@@ -1,19 +1,107 @@
1
- import type { UpdateChannel } from './update-channels.js';
1
+ import { createDefaultCommandRunner } from './run-command.js';
2
+ import { type UpdateChannel } from './update-channels.js';
3
+ import { type ExtensionPostUpdateResult } from '../extensions/update.js';
4
+ import { type GlobalInstallManager } from './update-global.js';
5
+ import { type InProcessRestartTrigger, type UpdateRestartResult } from './update-restart.js';
6
+ export type UpdateStepResult = {
7
+ name: string;
8
+ command: string;
9
+ cwd: string;
10
+ durationMs: number;
11
+ exitCode: number | null;
12
+ stdoutTail?: string | null;
13
+ stderrTail?: string | null;
14
+ };
15
+ export type UpdatePostUpdateResult = {
16
+ extensions?: ExtensionPostUpdateResult;
17
+ restart?: UpdateRestartResult;
18
+ };
19
+ export type UpdateRunResult = {
20
+ status: 'ok' | 'error' | 'skipped';
21
+ mode: 'git' | 'pnpm' | 'npm' | 'unknown';
22
+ root?: string;
23
+ reason?: string;
24
+ before?: {
25
+ sha?: string | null;
26
+ version?: string | null;
27
+ };
28
+ after?: {
29
+ sha?: string | null;
30
+ version?: string | null;
31
+ };
32
+ steps: UpdateStepResult[];
33
+ durationMs: number;
34
+ postUpdate?: UpdatePostUpdateResult;
35
+ };
36
+ export type UpdateStepInfo = {
37
+ name: string;
38
+ command: string;
39
+ index: number;
40
+ total: number;
41
+ };
42
+ export type UpdateStepCompletion = UpdateStepInfo & {
43
+ durationMs: number;
44
+ exitCode: number | null;
45
+ stderrTail?: string | null;
46
+ };
47
+ export type UpdateStepProgress = {
48
+ onStepStart?: (step: UpdateStepInfo) => void;
49
+ onStepComplete?: (step: UpdateStepCompletion) => void;
50
+ };
51
+ export type UpdateInstallSurface = {
52
+ kind: 'git';
53
+ mode: 'git';
54
+ root: string;
55
+ packageRoot: string;
56
+ } | {
57
+ kind: 'global';
58
+ mode: GlobalInstallManager;
59
+ root: string;
60
+ packageRoot: string;
61
+ } | {
62
+ kind: 'package-root';
63
+ mode: 'unknown';
64
+ root: string;
65
+ packageRoot: string;
66
+ } | {
67
+ kind: 'missing';
68
+ mode: 'unknown';
69
+ root?: string;
70
+ packageRoot?: undefined;
71
+ };
72
+ type UpdateRunnerOptions = {
73
+ cwd?: string;
74
+ argv1?: string;
75
+ channel?: UpdateChannel;
76
+ timeoutMs?: number;
77
+ progress?: UpdateStepProgress;
78
+ skipExtensionSync?: boolean;
79
+ shouldRestart?: boolean;
80
+ triggerInProcessRestart?: InProcessRestartTrigger;
81
+ };
82
+ export declare function resolveUpdateInstallSurface(opts?: Pick<UpdateRunnerOptions, 'cwd' | 'argv1' | 'timeoutMs'>): Promise<UpdateInstallSurface>;
83
+ export declare function runGatewayUpdate(opts?: UpdateRunnerOptions): Promise<UpdateRunResult>;
84
+ export declare function runGatewayUpdateWithPostSteps(opts?: UpdateRunnerOptions): Promise<UpdateRunResult>;
85
+ export declare function formatUpdateApiResult(result: UpdateRunResult, channel: UpdateChannel): Record<string, unknown>;
2
86
  export type AutoUpdateResult = {
3
87
  ok: boolean;
4
88
  exitCode: number | null;
5
89
  reason?: string;
6
90
  stdout?: string;
7
91
  stderr?: string;
92
+ result?: UpdateRunResult;
8
93
  };
9
94
  export declare function runAutoUpdateCommand(params: {
10
95
  channel: UpdateChannel;
11
96
  root?: string | null;
12
97
  timeoutMs?: number;
98
+ triggerInProcessRestart?: InProcessRestartTrigger;
13
99
  }): Promise<AutoUpdateResult>;
14
100
  export declare function runAutoUpdateCommandWithProgress(params: {
15
101
  channel: UpdateChannel;
16
102
  root?: string | null;
17
103
  timeoutMs?: number;
104
+ triggerInProcessRestart?: InProcessRestartTrigger;
18
105
  onProgress?: (line: string, source: 'stdout' | 'stderr') => void | Promise<void>;
19
106
  }): Promise<AutoUpdateResult>;
107
+ export { createDefaultCommandRunner };