@xopcai/xopc 0.0.153 → 0.0.154

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 (105) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-XA9328eM.js → activity-store-CzdG0bk4.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-E09Jv6kW.js → agent-avatar-dicebear-DFWvUDnw.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agents-BA46Lyc7.js → agents-D1VBNTLF.js} +1 -1
  6. package/dist/gateway/static/root/assets/{api-kQEpNIa-.js → api-CsyI9oBh.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-BzrND8g7.js → app-management-settings-panel-DjnqOKBb.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-CKMCWf75.js → appearance-settings-CRqe823O.js} +1 -1
  9. package/dist/gateway/static/root/assets/{apps-page-DPP_gFCc.js → apps-page-BcTujyqO.js} +1 -1
  10. package/dist/gateway/static/root/assets/{archive-plugin-DNOroxSq.js → archive-plugin-BXq09JWB.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-PtKuOOfL.js → attachment-load-zlQDh1aZ.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automation-suggestion-card-C7HQ5bAK.js → automation-suggestion-card-gGgpY4-w.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-page-BuMTtTYy.js → automations-page-BToFWoa2.js} +1 -1
  14. package/dist/gateway/static/root/assets/{binary-plugins-DDFoTNKm.js → binary-plugins-DCndLyIW.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-CH_e8EXF.js → block-editor-msfuLqvE.js} +1 -1
  16. package/dist/gateway/static/root/assets/{browser-settings-page-43uOCSrE.js → browser-settings-page-QKmt9rhz.js} +1 -1
  17. package/dist/gateway/static/root/assets/{capability-presets-api-Cby6Utaf.js → capability-presets-api-Bxopvkgk.js} +1 -1
  18. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-BZvp3H2p.js → capability-presets-settings-panel-DfNXDSNd.js} +1 -1
  19. package/dist/gateway/static/root/assets/{channel-recipient-api-COdmaOO4.js → channel-recipient-api-BnHaWUSY.js} +1 -1
  20. package/dist/gateway/static/root/assets/{channels-settings-BAPRTSF4.js → channels-settings-H4S5xOJd.js} +1 -1
  21. package/dist/gateway/static/root/assets/channels-status-swr-CCNusXn-.js +1 -0
  22. package/dist/gateway/static/root/assets/{connector-logo-CinEws2y.js → connector-logo-B-uLLvB8.js} +1 -1
  23. package/dist/gateway/static/root/assets/{connectors-page-P-Ur9mlf.js → connectors-page-CdhnQLcO.js} +1 -1
  24. package/dist/gateway/static/root/assets/{desktop-pet-O3wyOYRG.js → desktop-pet-Ex6MK9js.js} +1 -1
  25. package/dist/gateway/static/root/assets/{desktop-pet-settings-nbvEKluo.js → desktop-pet-settings-BOIzaX68.js} +1 -1
  26. package/dist/gateway/static/root/assets/{directory-picker-path-field-DyZJo5xz.js → directory-picker-path-field-DqGXYqi0.js} +1 -1
  27. package/dist/gateway/static/root/assets/{dreaming-settings-CruD-NNs.js → dreaming-settings-CxijakYG.js} +1 -1
  28. package/dist/gateway/static/root/assets/{extension-debug-page-CV7SDe48.js → extension-debug-page-BvdFiVRk.js} +1 -1
  29. package/dist/gateway/static/root/assets/{extension-page-DJCYwgB_.js → extension-page-Dh6JVCzg.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-settings-page-6kJQVKbq.js → extension-settings-page-DVj6FCSE.js} +1 -1
  31. package/dist/gateway/static/root/assets/{gateway-config-api-DOewYtbP.js → gateway-config-api-CQm4GutS.js} +1 -1
  32. package/dist/gateway/static/root/assets/{gateway-settings-BjjXod61.js → gateway-settings-ss66lTqH.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-startup-retry-ewVb05iS.js → gateway-startup-retry-BHJhfrQI.js} +1 -1
  34. package/dist/gateway/static/root/assets/{goal-create-dialog-BStw0m9M.js → goal-create-dialog-DrLfAaIQ.js} +1 -1
  35. package/dist/gateway/static/root/assets/{goal-detail-page-BOChQ7i7.js → goal-detail-page-CGX9RlwQ.js} +1 -1
  36. package/dist/gateway/static/root/assets/{goals-config-api-CYNvVerg.js → goals-config-api-qW18xhUI.js} +1 -1
  37. package/dist/gateway/static/root/assets/{goals-page-BrNRDv8T.js → goals-page-Dw_HSDwB.js} +1 -1
  38. package/dist/gateway/static/root/assets/{goals-settings-CHZcm6es.js → goals-settings-BIU5W1zl.js} +1 -1
  39. package/dist/gateway/static/root/assets/{heartbeat-settings-B5oMLvbo.js → heartbeat-settings-CfqjGaTh.js} +1 -1
  40. package/dist/gateway/static/root/assets/index-C74vxaN3.css +1 -0
  41. package/dist/gateway/static/root/assets/{index-B5cSZcER.js → index-DEFW3c5N.js} +62 -62
  42. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Eb8IqcMd.js → keyboard-shortcuts-settings-cCBoXp7P.js} +1 -1
  43. package/dist/gateway/static/root/assets/{local-app-workbench-page-L-MQ_dJY.js → local-app-workbench-page-D2eb_Y9l.js} +1 -1
  44. package/dist/gateway/static/root/assets/{local-apps-page-Zb0f5eNc.js → local-apps-page-DO2x_rcy.js} +1 -1
  45. package/dist/gateway/static/root/assets/{locale-store-CQDaFvDN.js → locale-store-D7eqlIJ9.js} +1 -1
  46. package/dist/gateway/static/root/assets/logs-page-CGWbln8I.js +7 -0
  47. package/dist/gateway/static/root/assets/{markdown-split-RnzQRPvB.js → markdown-split-BZXNhOwW.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-BoX0SWrl.js → media-plugins-DCetbXqB.js} +1 -1
  49. package/dist/gateway/static/root/assets/{messages--cnUi8Ld.js → messages-CJ9O8gs2.js} +4 -4
  50. package/dist/gateway/static/root/assets/{models-hub-panel-BQuynkNz.js → models-hub-panel-CgPuYUSc.js} +1 -1
  51. package/dist/gateway/static/root/assets/{notes-page-CSOXTk0P.js → notes-page-BimdI125.js} +1 -1
  52. package/dist/gateway/static/root/assets/{notes-workbench-B7NIQBqd.js → notes-workbench-CJgcA6rb.js} +2 -2
  53. package/dist/gateway/static/root/assets/{page-tabs-Dl9G6Pm3.js → page-tabs-U1pk4NrV.js} +1 -1
  54. package/dist/gateway/static/root/assets/{preview-open-alternatives-B8R5o1uN.js → preview-open-alternatives-Fxwf5YPD.js} +1 -1
  55. package/dist/gateway/static/root/assets/{project-detail-page-DoN-qkzc.js → project-detail-page-VxBEkOCK.js} +1 -1
  56. package/dist/gateway/static/root/assets/{projects-page-BBOW0A-s.js → projects-page-aaYIPefA.js} +1 -1
  57. package/dist/gateway/static/root/assets/{remote-access-hub-BzXHX9bU.js → remote-access-hub-DsoA6Lgj.js} +1 -1
  58. package/dist/gateway/static/root/assets/{save-bar-controls-D6OGeVDa.js → save-bar-controls-Dn4L4DG1.js} +1 -1
  59. package/dist/gateway/static/root/assets/{schedule-field-CKrch41X.js → schedule-field-RyKxT9K9.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schema-form-FroNrvKO.js → schema-form-C1vggaSD.js} +1 -1
  61. package/dist/gateway/static/root/assets/{sessions-page-c4n4TLc2.js → sessions-page-D6Izw2Lf.js} +1 -1
  62. package/dist/gateway/static/root/assets/settings-advanced-gate-2xdJe22X.js +1 -0
  63. package/dist/gateway/static/root/assets/{settings-collapsible-section-1SeKT26L.js → settings-collapsible-section-nlLe8F2O.js} +1 -1
  64. package/dist/gateway/static/root/assets/{settings-form-section-Cz4xOOt4.js → settings-form-section-D_ZiLpm2.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-loading-skeleton-rBI7xqmM.js → settings-loading-skeleton-B5N97pZa.js} +1 -1
  66. package/dist/gateway/static/root/assets/{settings-page-7SlGFgmR.js → settings-page-DPyCrjUe.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-page-layout-C7B19AHf.js → settings-page-layout-DIvXTz_k.js} +1 -1
  68. package/dist/gateway/static/root/assets/{setup-status-panel-_x53a0I_.js → setup-status-panel-DrJTD2wb.js} +1 -1
  69. package/dist/gateway/static/root/assets/{share-preview-page-DwcX1sXG.js → share-preview-page-Us8Qsjnv.js} +1 -1
  70. package/dist/gateway/static/root/assets/{shares-settings-BwfS4kkk.js → shares-settings-wKE-xvx5.js} +1 -1
  71. package/dist/gateway/static/root/assets/skill-reload-api-DKFt8QcO.js +1 -0
  72. package/dist/gateway/static/root/assets/{skills-page-sCuywwN5.js → skills-page-DLUejhxZ.js} +1 -1
  73. package/dist/gateway/static/root/assets/sliding-segmented-uWmrxE3P.js +1 -0
  74. package/dist/gateway/static/root/assets/{system-settings-panel-CZkASLIv.js → system-settings-panel-5lTZWRTB.js} +1 -1
  75. package/dist/gateway/static/root/assets/{theme-store-DP5WlsZg.js → theme-store-BpYvZAYm.js} +1 -1
  76. package/dist/gateway/static/root/assets/{typed-models-lib-C2TbyW3H.js → typed-models-lib-BkK8sFRf.js} +1 -1
  77. package/dist/gateway/static/root/assets/{use-channel-catalog-4WYXfEXk.js → use-channel-catalog-CyWgVZUn.js} +1 -1
  78. package/dist/gateway/static/root/assets/{user-context-page-0MO96b3-.js → user-context-page-CI0uYsYu.js} +1 -1
  79. package/dist/gateway/static/root/assets/{user-profile-fields-editor-Cqalx8iJ.js → user-profile-fields-editor-DHORj_-E.js} +1 -1
  80. package/dist/gateway/static/root/assets/{user-profile-settings-panel-CVbTC44o.js → user-profile-settings-panel-C0cBmeSQ.js} +1 -1
  81. package/dist/gateway/static/root/assets/{utils-DOvyuYat.js → utils-D_hszPJs.js} +1 -1
  82. package/dist/gateway/static/root/assets/{voice-api-key-field-ClOb2PfC.js → voice-api-key-field-C8A5XTpx.js} +1 -1
  83. package/dist/gateway/static/root/assets/{work-discovery-page-Ci_rGhsb.js → work-discovery-page-QyGK7xcU.js} +1 -1
  84. package/dist/gateway/static/root/assets/{work-item-detail-page-DnJeDqJB.js → work-item-detail-page-DtM6dJcm.js} +1 -1
  85. package/dist/gateway/static/root/assets/work-page-BkWtyIkX.js +1 -0
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-pNCz37MS.js → workflow-run-setup-panel-DxO26B4k.js} +1 -1
  87. package/dist/gateway/static/root/assets/{workflows-page-BFTxMEH6.js → workflows-page-CzHTzaGu.js} +1 -1
  88. package/dist/gateway/static/root/index.html +7 -7
  89. package/dist/package.js +1 -1
  90. package/dist/src/config/agent-profile.js +1 -1
  91. package/dist/src/gateway/agents-admin.js +1 -1
  92. package/dist/src/gateway/heartbeat/service.js +1 -1
  93. package/dist/src/heartbeat/index.js +1 -1
  94. package/dist/src/infra/update-restart.d.ts +1 -0
  95. package/dist/src/infra/update-restart.js +20 -0
  96. package/dist/src/infra/update-runner.js +1 -0
  97. package/dist/src/infra/update-service-refresh.d.ts +14 -0
  98. package/dist/src/infra/update-service-refresh.js +66 -0
  99. package/package.json +1 -1
  100. package/dist/gateway/static/root/assets/channels-status-swr-DvB_8J5B.js +0 -1
  101. package/dist/gateway/static/root/assets/index-CNr0KWZU.css +0 -1
  102. package/dist/gateway/static/root/assets/logs-page-ToUMpW7t.js +0 -7
  103. package/dist/gateway/static/root/assets/settings-advanced-gate-BEsX3iAM.js +0 -1
  104. package/dist/gateway/static/root/assets/skill-reload-api-BkjO4n_a.js +0 -1
  105. package/dist/gateway/static/root/assets/work-page-n9XZM9PY.js +0 -1
@@ -11,7 +11,7 @@
11
11
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260713-1" />
12
12
  <link rel="manifest" href="/site.webmanifest?v=20260713-1" />
13
13
  <title>xopc</title>
14
- <script type="module" crossorigin src="/assets/index-B5cSZcER.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-DEFW3c5N.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
@@ -24,15 +24,15 @@
24
24
  <link rel="modulepreload" crossorigin href="/assets/check-BODqo66o.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/circle-alert-RzVebuX2.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
27
- <link rel="modulepreload" crossorigin href="/assets/messages--cnUi8Ld.js">
28
- <link rel="modulepreload" crossorigin href="/assets/locale-store-CQDaFvDN.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/messages-CJ9O8gs2.js">
28
+ <link rel="modulepreload" crossorigin href="/assets/locale-store-D7eqlIJ9.js">
29
29
  <link rel="modulepreload" crossorigin href="/assets/schemas-DgQq6Z5S.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/config-reload-event-Bjh2zoKp.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
32
- <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-ewVb05iS.js">
33
- <link rel="modulepreload" crossorigin href="/assets/activity-store-XA9328eM.js">
34
- <link rel="modulepreload" crossorigin href="/assets/theme-store-DP5WlsZg.js">
35
- <link rel="stylesheet" crossorigin href="/assets/index-CNr0KWZU.css">
32
+ <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-BHJhfrQI.js">
33
+ <link rel="modulepreload" crossorigin href="/assets/activity-store-CzdG0bk4.js">
34
+ <link rel="modulepreload" crossorigin href="/assets/theme-store-BpYvZAYm.js">
35
+ <link rel="stylesheet" crossorigin href="/assets/index-C74vxaN3.css">
36
36
  </head>
37
37
  <body>
38
38
  <div id="root"></div>
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.0.153";
2
+ var version = "0.0.154";
3
3
  //#endregion
4
4
  export { version };
@@ -1,6 +1,6 @@
1
+ import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
1
2
  import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
2
3
  import "../agent-manifest/index.js";
3
- import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
4
4
  import { init_session_key, parseSessionKey } from "../routing/session-key.js";
5
5
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
6
6
  //#region src/config/agent-profile.ts
@@ -1,5 +1,5 @@
1
- import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
2
1
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
2
+ import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
3
3
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
4
4
  import { WORKSPACE_FILES, init_paths, resolveUserProfilePath } from "../config/paths.js";
5
5
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { shouldSilence, stripHeartbeatToken } from "../../heartbeat/tokens.js";
4
+ import { appendCronEventLines } from "../../heartbeat/event-prompt.js";
4
5
  import { isWithinActiveHours } from "../../heartbeat/active-hours.js";
5
6
  import { isHeartbeatContentEmpty } from "../../heartbeat/content-check.js";
6
- import { appendCronEventLines } from "../../heartbeat/event-prompt.js";
7
7
  import { createHeartbeatWake } from "../../heartbeat/wake.js";
8
8
  import { resolveHeartbeatMdPath } from "../workspace-heartbeat-path.js";
9
9
  import { readFile } from "fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, shouldSilence, stripHeartbeatToken } from "./tokens.js";
2
+ import { appendCronEventLines } from "./event-prompt.js";
2
3
  import { isWithinActiveHours } from "./active-hours.js";
3
4
  import { isHeartbeatContentEmpty } from "./content-check.js";
4
- import { appendCronEventLines } from "./event-prompt.js";
5
5
  import { createHeartbeatWake } from "./wake.js";
6
6
  export { DEFAULT_ACK_MAX_CHARS, HEARTBEAT_OK, NO_REPLY, appendCronEventLines, createHeartbeatWake, isHeartbeatContentEmpty, isWithinActiveHours, shouldSilence, stripHeartbeatToken };
@@ -15,6 +15,7 @@ export declare function isRunningInsideGatewayService(env?: Record<string, strin
15
15
  export declare function maybeRestartGatewayAfterUpdate(params: {
16
16
  shouldRestart?: boolean;
17
17
  expectedVersion?: string;
18
+ updatedPackageRoot?: string;
18
19
  configPath?: string;
19
20
  triggerInProcessRestart?: InProcessRestartTrigger;
20
21
  }): Promise<UpdateRestartResult>;
@@ -6,6 +6,7 @@ import { isRestartEnabled } from "../config/commands.flags.js";
6
6
  import { resolveGatewayService } from "../daemon/service.js";
7
7
  import { authorizeGatewaySigusr1Restart, writeGatewayRestartIntentSync } from "./restart.js";
8
8
  import { findVerifiedGatewayListenerPidsOnPortSync, signalVerifiedGatewayPidSync } from "./gateway-processes.js";
9
+ import { refreshGatewayServiceAfterUpdate } from "./update-service-refresh.js";
9
10
  //#region src/infra/update-restart.ts
10
11
  init_loader();
11
12
  init_paths();
@@ -143,6 +144,25 @@ async function maybeRestartGatewayAfterUpdate(params) {
143
144
  message: "Gateway restart is disabled (commands.restart=false). Restart manually: xopc gateway restart"
144
145
  };
145
146
  if (isRunningInsideGatewayService() && params.triggerInProcessRestart) {
147
+ if (params.updatedPackageRoot && params.expectedVersion) try {
148
+ const service = await resolveGatewayService();
149
+ if (await service.isLoaded({ env: process.env })) await refreshGatewayServiceAfterUpdate({
150
+ service,
151
+ packageRoot: params.updatedPackageRoot,
152
+ expectedVersion: params.expectedVersion
153
+ });
154
+ } catch (err) {
155
+ const message = err instanceof Error ? err.message : String(err);
156
+ log.warn({
157
+ err,
158
+ expectedVersion: params.expectedVersion
159
+ }, `Gateway service refresh failed after update: ${message}`);
160
+ return {
161
+ ok: false,
162
+ mode: "failed",
163
+ message: `Installed ${params.expectedVersion}, but failed to refresh the gateway service: ${message}`
164
+ };
165
+ }
146
166
  const result = params.triggerInProcessRestart();
147
167
  if (!result.ok) return {
148
168
  ok: false,
@@ -541,6 +541,7 @@ async function runGatewayUpdateWithPostSteps(opts = {}) {
541
541
  postUpdate.restart = await maybeRestartGatewayAfterUpdate({
542
542
  shouldRestart: opts.shouldRestart,
543
543
  expectedVersion: result.after?.version ?? void 0,
544
+ updatedPackageRoot: result.mode === "npm" || result.mode === "pnpm" ? result.root : void 0,
544
545
  triggerInProcessRestart: opts.triggerInProcessRestart
545
546
  });
546
547
  return {
@@ -0,0 +1,14 @@
1
+ import type { GatewayService, GatewayServiceCommandConfig, GatewayServiceInstallArgs } from '../daemon/types.js';
2
+ export declare function resolveUpdatedGatewayEntryPoint(packageRoot: string): Promise<string>;
3
+ export declare function buildRefreshedGatewayServiceArgs(params: {
4
+ command: GatewayServiceCommandConfig;
5
+ entryPoint: string;
6
+ expectedVersion: string;
7
+ env?: NodeJS.ProcessEnv;
8
+ }): GatewayServiceInstallArgs;
9
+ export declare function refreshGatewayServiceAfterUpdate(params: {
10
+ service: GatewayService;
11
+ packageRoot: string;
12
+ expectedVersion: string;
13
+ env?: NodeJS.ProcessEnv;
14
+ }): Promise<void>;
@@ -0,0 +1,66 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { SERVICE_VERSION_ENV_KEY, formatGatewayServiceDescription } from "../daemon/constants.js";
4
+ import path from "node:path";
5
+ import fs from "node:fs/promises";
6
+ //#region src/infra/update-service-refresh.ts
7
+ init_logger();
8
+ const log = createLogger("UpdateServiceRefresh");
9
+ function resolveBinPath(bin) {
10
+ if (typeof bin === "string") return bin;
11
+ if (!bin || typeof bin !== "object") return null;
12
+ return bin.xopc ?? Object.values(bin).find((value) => typeof value === "string") ?? null;
13
+ }
14
+ async function resolveUpdatedGatewayEntryPoint(packageRoot) {
15
+ const resolvedRoot = path.resolve(packageRoot);
16
+ const packageJsonPath = path.join(resolvedRoot, "package.json");
17
+ const binPath = resolveBinPath(JSON.parse(await fs.readFile(packageJsonPath, "utf8")).bin);
18
+ if (!binPath) throw new Error(`Updated package has no xopc CLI entry point: ${packageJsonPath}`);
19
+ const entryPoint = path.resolve(resolvedRoot, binPath);
20
+ const relative = path.relative(resolvedRoot, entryPoint);
21
+ if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) throw new Error(`Updated xopc CLI entry point escapes its package root: ${binPath}`);
22
+ await fs.access(entryPoint);
23
+ return entryPoint;
24
+ }
25
+ function buildRefreshedGatewayServiceArgs(params) {
26
+ const programArguments = [...params.command.programArguments];
27
+ const gatewayArgIndex = programArguments.findLastIndex((arg) => arg === "gateway");
28
+ if (gatewayArgIndex < 2) throw new Error("Gateway service command does not contain a replaceable Node.js CLI entry point.");
29
+ programArguments[gatewayArgIndex - 1] = params.entryPoint;
30
+ const environment = {
31
+ ...params.command.environment,
32
+ [SERVICE_VERSION_ENV_KEY]: params.expectedVersion,
33
+ XOPC_SERVICE_MARKER: "1"
34
+ };
35
+ const profile = params.env?.XOPC_PROFILE?.trim() || void 0;
36
+ return {
37
+ env: params.env ?? process.env,
38
+ stdout: process.stdout,
39
+ programArguments,
40
+ workingDirectory: params.command.workingDirectory,
41
+ environment,
42
+ description: formatGatewayServiceDescription({
43
+ profile,
44
+ version: params.expectedVersion
45
+ })
46
+ };
47
+ }
48
+ async function refreshGatewayServiceAfterUpdate(params) {
49
+ const env = params.env ?? process.env;
50
+ const command = await params.service.readCommand(env);
51
+ if (!command) throw new Error("Could not read the installed gateway service command.");
52
+ const entryPoint = await resolveUpdatedGatewayEntryPoint(params.packageRoot);
53
+ const installArgs = buildRefreshedGatewayServiceArgs({
54
+ command,
55
+ entryPoint,
56
+ expectedVersion: params.expectedVersion,
57
+ env
58
+ });
59
+ await params.service.install(installArgs);
60
+ log.info({
61
+ entryPoint,
62
+ expectedVersion: params.expectedVersion
63
+ }, "Refreshed gateway service definition after update");
64
+ }
65
+ //#endregion
66
+ export { buildRefreshedGatewayServiceArgs, refreshGatewayServiceAfterUpdate, resolveUpdatedGatewayEntryPoint };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.153",
3
+ "version": "0.0.154",
4
4
  "description": "Local-first AI system that remembers context, coordinates AI, and sustains long-term progress.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -1 +0,0 @@
1
- import{r as e}from"./locale-store-CQDaFvDN.js";import{n as t}from"./channel-recipient-api-COdmaOO4.js";function n(){return e(`/api/channels/status`)}var r=t;export{r as n,n as t};