@xopcai/xopc 0.0.153 → 0.0.155
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.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-XA9328eM.js → activity-store-Btmg10yU.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-E09Jv6kW.js → agent-avatar-dicebear-pdlJJov8.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-BA46Lyc7.js → agents-NDjTqOIb.js} +1 -1
- package/dist/gateway/static/root/assets/{api-kQEpNIa-.js → api-GGYxPxVF.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BzrND8g7.js → app-management-settings-panel-BU9oSmtJ.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-CKMCWf75.js → appearance-settings-B2chSkbj.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-DPP_gFCc.js → apps-page-DHvwQknj.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DNOroxSq.js → archive-plugin-BC83GwY1.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-PtKuOOfL.js → attachment-load-DWSH5325.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-C7HQ5bAK.js → automation-suggestion-card-Bc25f4wz.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BuMTtTYy.js → automations-page-32U6mfy-.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-DDFoTNKm.js → binary-plugins-Kgu5yX35.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CH_e8EXF.js → block-editor-B9gJmzdE.js} +4 -4
- package/dist/gateway/static/root/assets/{browser-settings-page-43uOCSrE.js → browser-settings-page-CTWycuu_.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-api-Cby6Utaf.js → capability-presets-api-6z36IfIC.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-BZvp3H2p.js → capability-presets-settings-panel-Bqzl2UZ9.js} +1 -1
- package/dist/gateway/static/root/assets/{channel-recipient-api-COdmaOO4.js → channel-recipient-api-DEkm4HRd.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-BAPRTSF4.js → channels-settings-DdelF9BQ.js} +1 -1
- package/dist/gateway/static/root/assets/channels-status-swr-CBgr61Zt.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-CinEws2y.js → connector-logo-DPriINR1.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-P-Ur9mlf.js → connectors-page-CO3ASIfE.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-O3wyOYRG.js → desktop-pet-CG91Su8E.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-nbvEKluo.js → desktop-pet-settings-DUzETFxq.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-DyZJo5xz.js → directory-picker-path-field-XNbI2wM7.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-CruD-NNs.js → dreaming-settings-BsLa5Nr8.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-CV7SDe48.js → extension-debug-page-C-5Nyrdu.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DJCYwgB_.js → extension-page-BEocT43y.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-6kJQVKbq.js → extension-settings-page--XOHrL-O.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-DOewYtbP.js → gateway-config-api-DZrNmiR3.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-BjjXod61.js → gateway-settings-DfBvlqb2.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-ewVb05iS.js → gateway-startup-retry-Cc5dxiD_.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-create-dialog-BStw0m9M.js → goal-create-dialog-BRVB5I7f.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-detail-page-BOChQ7i7.js → goal-detail-page-Drdz_llY.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-config-api-CYNvVerg.js → goals-config-api-Cdghd3f3.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-page-BrNRDv8T.js → goals-page-CEh2UTzg.js} +1 -1
- package/dist/gateway/static/root/assets/{goals-settings-CHZcm6es.js → goals-settings-CvOdikU6.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-B5oMLvbo.js → heartbeat-settings-CvaxjdV_.js} +1 -1
- package/dist/gateway/static/root/assets/{index-B5cSZcER.js → index-C4HpPu1y.js} +62 -62
- package/dist/gateway/static/root/assets/index-DjvInkv6.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Eb8IqcMd.js → keyboard-shortcuts-settings-BVt0deH6.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-L-MQ_dJY.js → local-app-workbench-page-Dcmb1Ruc.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-Zb0f5eNc.js → local-apps-page-C0HGfwao.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-CQDaFvDN.js → locale-store-Dt0pSudQ.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-BWdV-HsP.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-RnzQRPvB.js → markdown-split-CjVg43Kl.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BoX0SWrl.js → media-plugins-D-LkrsY6.js} +1 -1
- package/dist/gateway/static/root/assets/{messages--cnUi8Ld.js → messages-CqXpNawC.js} +4 -4
- package/dist/gateway/static/root/assets/{models-hub-panel-BQuynkNz.js → models-hub-panel-Du41WFC6.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-CSOXTk0P.js → notes-page-BsoNcBQ3.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-workbench-B7NIQBqd.js → notes-workbench-VeU2xG2r.js} +2 -2
- package/dist/gateway/static/root/assets/{page-tabs-Dl9G6Pm3.js → page-tabs-C9OfBAT6.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-B8R5o1uN.js → preview-open-alternatives-BCrigyTS.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-DoN-qkzc.js → project-detail-page-B9QsnXWV.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-BBOW0A-s.js → projects-page-BbplZbzF.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BzXHX9bU.js → remote-access-hub-CfbuqKDd.js} +1 -1
- package/dist/gateway/static/root/assets/{save-bar-controls-D6OGeVDa.js → save-bar-controls-CnyZMYdJ.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CKrch41X.js → schedule-field-Bez97_Ou.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-FroNrvKO.js → schema-form-DbKY5jSv.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-c4n4TLc2.js → sessions-page-CSQLpHd4.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-C25HTTPK.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-1SeKT26L.js → settings-collapsible-section-4f60Dgw-.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Cz4xOOt4.js → settings-form-section-CCQ7MjdZ.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-rBI7xqmM.js → settings-loading-skeleton-CQhjhb0F.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-7SlGFgmR.js → settings-page-BZb-E5vI.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-C7B19AHf.js → settings-page-layout-C7sfPFaM.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-_x53a0I_.js → setup-status-panel-B1FSxWQ3.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DwcX1sXG.js → share-preview-page-DeErzPeg.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-BwfS4kkk.js → shares-settings-DDg5dL3k.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-B-ocgAT-.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-sCuywwN5.js → skills-page-CtO4i9ds.js} +1 -1
- package/dist/gateway/static/root/assets/sliding-segmented-uWmrxE3P.js +1 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-CZkASLIv.js → system-settings-panel-Dk1ZhfpM.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-DP5WlsZg.js → theme-store-Cd_gY2Cb.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-C2TbyW3H.js → typed-models-lib-fe1xAgdw.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-4WYXfEXk.js → use-channel-catalog-Cbo3s1uh.js} +1 -1
- package/dist/gateway/static/root/assets/{user-context-page-0MO96b3-.js → user-context-page-CqtVqiYz.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-fields-editor-Cqalx8iJ.js → user-profile-fields-editor-DcnCOHwp.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-CVbTC44o.js → user-profile-settings-panel-CTWZR6nV.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-DOvyuYat.js → utils-BDzZMJls.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-ClOb2PfC.js → voice-api-key-field-C9Psto-d.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-Ci_rGhsb.js → work-discovery-page-CNVeagdJ.js} +1 -1
- package/dist/gateway/static/root/assets/{work-item-detail-page-DnJeDqJB.js → work-item-detail-page-DKSNc1SH.js} +1 -1
- package/dist/gateway/static/root/assets/work-page-Bwbg1Ht-.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-pNCz37MS.js → workflow-run-setup-panel-ZKbrdYmp.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-BFTxMEH6.js → workflows-page-DBHqpZ76.js} +1 -1
- package/dist/gateway/static/root/index.html +7 -7
- package/dist/package.js +1 -1
- package/dist/src/agent/embedded/run-turn.js +2 -2
- package/dist/src/agent/embedded/session-runner.js +3 -3
- package/dist/src/agent/embedded/xopc-stream-bridge.d.ts +1 -1
- package/dist/src/agent/embedded/xopc-stream-bridge.js +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/update-restart.d.ts +1 -0
- package/dist/src/infra/update-restart.js +20 -0
- package/dist/src/infra/update-runner.js +1 -0
- package/dist/src/infra/update-service-refresh.d.ts +14 -0
- package/dist/src/infra/update-service-refresh.js +66 -0
- package/package.json +5 -5
- package/dist/gateway/static/root/assets/channels-status-swr-DvB_8J5B.js +0 -1
- package/dist/gateway/static/root/assets/index-CNr0KWZU.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-ToUMpW7t.js +0 -7
- package/dist/gateway/static/root/assets/settings-advanced-gate-BEsX3iAM.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BkjO4n_a.js +0 -1
- 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-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-C4HpPu1y.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
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/locale-store-
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/messages-CqXpNawC.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/locale-store-Dt0pSudQ.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-
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/activity-store-
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-store-
|
|
35
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
32
|
+
<link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-Cc5dxiD_.js">
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-store-Btmg10yU.js">
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-store-Cd_gY2Cb.js">
|
|
35
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DjvInkv6.css">
|
|
36
36
|
</head>
|
|
37
37
|
<body>
|
|
38
38
|
<div id="root"></div>
|
package/dist/package.js
CHANGED
|
@@ -74,7 +74,7 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
74
74
|
thinkingLevel: thinkingLevel ?? "medium"
|
|
75
75
|
});
|
|
76
76
|
const { session, reused } = runner;
|
|
77
|
-
const streamFnWithXopcExtensions = wrapStreamFnForXopcExtensions(session.agent.
|
|
77
|
+
const streamFnWithXopcExtensions = wrapStreamFnForXopcExtensions(session.agent.streamFunction);
|
|
78
78
|
const loggingStreamFn = (streamModel, context, options) => {
|
|
79
79
|
const loopGuard = detectToolLoops(extractRecentToolCalls(context.messages));
|
|
80
80
|
let effectiveContext = context;
|
|
@@ -110,7 +110,7 @@ async function runXopcEmbeddedTurn(params) {
|
|
|
110
110
|
}, "Sending messages to AI");
|
|
111
111
|
return streamFnWithXopcExtensions(streamModel, effectiveContext, options);
|
|
112
112
|
};
|
|
113
|
-
session.agent.
|
|
113
|
+
session.agent.streamFunction = loggingStreamFn;
|
|
114
114
|
if (onEvent) unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
|
|
115
115
|
onEvent({
|
|
116
116
|
...event,
|
|
@@ -104,7 +104,7 @@ var EmbeddedSessionRunnerPool = class {
|
|
|
104
104
|
reused = true;
|
|
105
105
|
this.stats.reuses += 1;
|
|
106
106
|
applySystemPromptOverrideToSession(entry.session, params.systemPrompt);
|
|
107
|
-
entry.session.agent.
|
|
107
|
+
entry.session.agent.streamFunction = entry.baseStreamFn;
|
|
108
108
|
log.debug({ sessionKey: params.sessionKey }, "Reusing pooled embedded session runner");
|
|
109
109
|
} else {
|
|
110
110
|
if (existing) this.disposePooledRunner(params.sessionKey, existing, "fingerprint_mismatch");
|
|
@@ -189,8 +189,8 @@ var EmbeddedSessionRunnerPool = class {
|
|
|
189
189
|
tools: toolNames
|
|
190
190
|
});
|
|
191
191
|
applySystemPromptOverrideToSession(session, systemPrompt);
|
|
192
|
-
const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.
|
|
193
|
-
session.agent.
|
|
192
|
+
const baseStreamFn = wrapStreamFnForXopcExtensions(session.agent.streamFunction);
|
|
193
|
+
session.agent.streamFunction = baseStreamFn;
|
|
194
194
|
return {
|
|
195
195
|
sessionKey,
|
|
196
196
|
fingerprint: buildEmbeddedRunnerFingerprint({
|
|
@@ -6,6 +6,6 @@ import type { StreamFn } from '@earendil-works/pi-agent-core';
|
|
|
6
6
|
* implementation. Wrap the original streamFn so plugin models go through xopc's bridge
|
|
7
7
|
* and everything else falls through to the original auth-aware streamFn.
|
|
8
8
|
*
|
|
9
|
-
* Use this by reassigning {@link Agent.
|
|
9
|
+
* Use this by reassigning {@link Agent.streamFunction} after `createAgentSession` returns.
|
|
10
10
|
*/
|
|
11
11
|
export declare function wrapStreamFnForXopcExtensions(originalStreamFn: StreamFn): StreamFn;
|
|
@@ -10,7 +10,7 @@ init_providers();
|
|
|
10
10
|
* implementation. Wrap the original streamFn so plugin models go through xopc's bridge
|
|
11
11
|
* and everything else falls through to the original auth-aware streamFn.
|
|
12
12
|
*
|
|
13
|
-
* Use this by reassigning {@link Agent.
|
|
13
|
+
* Use this by reassigning {@link Agent.streamFunction} after `createAgentSession` returns.
|
|
14
14
|
*/
|
|
15
15
|
function wrapStreamFnForXopcExtensions(originalStreamFn) {
|
|
16
16
|
const extensionStreamFn = createExtensionAwareStreamFn();
|
|
@@ -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.
|
|
3
|
+
"version": "0.0.155",
|
|
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",
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"node": ">=22.19.0"
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@earendil-works/pi-agent-core": "0.
|
|
69
|
-
"@earendil-works/pi-ai": "0.
|
|
70
|
-
"@earendil-works/pi-coding-agent": "0.
|
|
71
|
-
"@earendil-works/pi-tui": "0.
|
|
68
|
+
"@earendil-works/pi-agent-core": "0.82.1",
|
|
69
|
+
"@earendil-works/pi-ai": "0.82.1",
|
|
70
|
+
"@earendil-works/pi-coding-agent": "0.82.1",
|
|
71
|
+
"@earendil-works/pi-tui": "0.82.1",
|
|
72
72
|
"@grammyjs/runner": "^2.0.3",
|
|
73
73
|
"@hono/node-server": "^2.0.4",
|
|
74
74
|
"@inquirer/prompts": "^8.5.0",
|
|
@@ -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};
|