@openclaw-cloud/agent-controller 3.1.0 → 3.1.2
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/bin/agent-controller.js +5 -9
- package/dist/api.d.ts +7 -0
- package/dist/api.js.map +1 -1
- package/dist/commands/agent-update-cli.js +23 -38
- package/dist/commands/agent-update-cli.js.map +1 -1
- package/dist/commands/backup-cli.js +6 -4
- package/dist/commands/backup-cli.js.map +1 -1
- package/dist/commands/bootstrap.d.ts +10 -1
- package/dist/commands/bootstrap.js +25 -73
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/channel-server.js +4 -3
- package/dist/commands/channel-server.js.map +1 -1
- package/dist/commands/heartbeat-cli.js +2 -6
- package/dist/commands/heartbeat-cli.js.map +1 -1
- package/dist/commands/install-deps.d.ts +10 -0
- package/dist/commands/install-deps.js +33 -43
- package/dist/commands/install-deps.js.map +1 -1
- package/dist/commands/knowledge-sync-cli.js +6 -4
- package/dist/commands/knowledge-sync-cli.js.map +1 -1
- package/dist/commands/plugin-update-cli.js +4 -8
- package/dist/commands/plugin-update-cli.js.map +1 -1
- package/dist/commands/self-update.js +17 -34
- package/dist/commands/self-update.js.map +1 -1
- package/dist/commands/update-skills.js +7 -6
- package/dist/commands/update-skills.js.map +1 -1
- package/dist/config-file.d.ts +7 -0
- package/dist/config-file.js +22 -11
- package/dist/config-file.js.map +1 -1
- package/dist/handlers/agent-update.d.ts +4 -0
- package/dist/handlers/agent-update.js +16 -44
- package/dist/handlers/agent-update.js.map +1 -1
- package/dist/handlers/deploy.d.ts +1 -2
- package/dist/handlers/deploy.js +4 -20
- package/dist/handlers/deploy.js.map +1 -1
- package/dist/handlers/diagnostics.js +0 -12
- package/dist/handlers/diagnostics.js.map +1 -1
- package/dist/handlers/file-delete.js +4 -5
- package/dist/handlers/file-delete.js.map +1 -1
- package/dist/handlers/file-write.js +4 -4
- package/dist/handlers/file-write.js.map +1 -1
- package/dist/handlers/knowledge-sync.js +2 -14
- package/dist/handlers/knowledge-sync.js.map +1 -1
- package/dist/handlers/memory.d.ts +11 -1
- package/dist/handlers/memory.js.map +1 -1
- package/dist/handlers/onboarding.d.ts +1 -2
- package/dist/handlers/onboarding.js +3 -20
- package/dist/handlers/onboarding.js.map +1 -1
- package/dist/handlers/package-install.js +1 -1
- package/dist/handlers/package-install.js.map +1 -1
- package/dist/handlers/pair.js +0 -12
- package/dist/handlers/pair.js.map +1 -1
- package/dist/handlers/restart.d.ts +1 -2
- package/dist/handlers/restart.js +3 -8
- package/dist/handlers/restart.js.map +1 -1
- package/dist/handlers/stop.js +0 -7
- package/dist/handlers/stop.js.map +1 -1
- package/dist/handlers/telegram-webhook.js +3 -22
- package/dist/handlers/telegram-webhook.js.map +1 -1
- package/dist/handlers/update-config.js +4 -13
- package/dist/handlers/update-config.js.map +1 -1
- package/dist/heartbeat.js +2 -1
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.js +57 -117
- package/dist/index.js.map +1 -1
- package/dist/lockfile.js +2 -1
- package/dist/lockfile.js.map +1 -1
- package/dist/platform/linux.js +6 -5
- package/dist/platform/linux.js.map +1 -1
- package/dist/platform/macos.js +3 -2
- package/dist/platform/macos.js.map +1 -1
- package/dist/platform/windows.js +3 -2
- package/dist/platform/windows.js.map +1 -1
- package/dist/providers/claude-code/channel-server.js +2 -1
- package/dist/providers/claude-code/channel-server.js.map +1 -1
- package/dist/providers/claude-code/settings-writer.d.ts +3 -2
- package/dist/providers/claude-code/settings-writer.js +6 -15
- package/dist/providers/claude-code/settings-writer.js.map +1 -1
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.js +25 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openclaw/gateway-adapter.js +2 -0
- package/dist/providers/openclaw/gateway-adapter.js.map +1 -1
- package/dist/providers/openclaw/index.js +11 -13
- package/dist/providers/openclaw/index.js.map +1 -1
- package/dist/utils/anthropic-auth.d.ts +14 -0
- package/dist/utils/anthropic-auth.js +24 -0
- package/dist/utils/anthropic-auth.js.map +1 -1
- package/dist/utils/apply-config.d.ts +38 -6
- package/dist/utils/apply-config.js +118 -69
- package/dist/utils/apply-config.js.map +1 -1
- package/dist/utils/claude-env.d.ts +6 -0
- package/dist/utils/claude-env.js +29 -28
- package/dist/utils/claude-env.js.map +1 -1
- package/dist/utils/deploy-type.d.ts +16 -0
- package/dist/utils/deploy-type.js +34 -0
- package/dist/utils/deploy-type.js.map +1 -0
- package/dist/utils/env.d.ts +0 -1
- package/dist/utils/env.js +0 -8
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/exec.d.ts +9 -0
- package/dist/utils/exec.js +12 -1
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/gateway-restart-handler.d.ts +6 -2
- package/dist/utils/gateway-restart-handler.js +11 -2
- package/dist/utils/gateway-restart-handler.js.map +1 -1
- package/dist/utils/gateway-restart.d.ts +7 -0
- package/dist/utils/gateway-restart.js +12 -4
- package/dist/utils/gateway-restart.js.map +1 -1
- package/dist/utils/knowledge-graph.d.ts +13 -1
- package/dist/utils/knowledge-graph.js +75 -29
- package/dist/utils/knowledge-graph.js.map +1 -1
- package/dist/utils/legacy-mcp-servers.d.ts +12 -0
- package/dist/utils/legacy-mcp-servers.js +37 -0
- package/dist/utils/legacy-mcp-servers.js.map +1 -0
- package/dist/utils/log-collector.js +2 -1
- package/dist/utils/log-collector.js.map +1 -1
- package/dist/utils/openclaw-ops.js +8 -7
- package/dist/utils/openclaw-ops.js.map +1 -1
- package/dist/utils/openclaw-stack-update.d.ts +31 -0
- package/dist/utils/openclaw-stack-update.js +50 -0
- package/dist/utils/openclaw-stack-update.js.map +1 -0
- package/dist/utils/package-install.js +4 -12
- package/dist/utils/package-install.js.map +1 -1
- package/dist/utils/package-version.d.ts +10 -0
- package/dist/utils/package-version.js +18 -0
- package/dist/utils/package-version.js.map +1 -0
- package/dist/utils/parse-id-at-version.d.ts +15 -0
- package/dist/utils/parse-id-at-version.js +22 -0
- package/dist/utils/parse-id-at-version.js.map +1 -0
- package/dist/utils/response.js +1 -0
- package/dist/utils/response.js.map +1 -1
- package/dist/utils/write-workspace-files.d.ts +1 -1
- package/dist/utils/write-workspace-files.js +19 -7
- package/dist/utils/write-workspace-files.js.map +1 -1
- package/dist/workspace.d.ts +11 -0
- package/dist/workspace.js +20 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +9 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { installPlugin } from '../utils/openclaw-ops.js';
|
|
2
|
+
import { parseIdAtVersion } from '../utils/parse-id-at-version.js';
|
|
2
3
|
import { logCollector } from '../connection.js';
|
|
3
4
|
import { toErrorMessage } from '../utils/response.js';
|
|
4
5
|
// ---------------------------------------------------------------------------
|
|
@@ -12,15 +13,10 @@ const USAGE = 'Usage: agent-controller plugin-update <id> <version>\n' +
|
|
|
12
13
|
' agent-controller plugin-update <id>@<version>';
|
|
13
14
|
function parseArgs(args) {
|
|
14
15
|
if (args.length === 1) {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
if (at <= 0)
|
|
16
|
+
const combined = args[0];
|
|
17
|
+
if (!combined)
|
|
18
18
|
return null;
|
|
19
|
-
|
|
20
|
-
const version = args[0].slice(at + 1).trim();
|
|
21
|
-
if (!id || !version)
|
|
22
|
-
return null;
|
|
23
|
-
return { id, version };
|
|
19
|
+
return parseIdAtVersion(combined);
|
|
24
20
|
}
|
|
25
21
|
if (args.length === 2) {
|
|
26
22
|
const id = args[0]?.trim() ?? '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-update-cli.js","sourceRoot":"","sources":["../../src/commands/plugin-update-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,8EAA8E;AAC9E,qEAAqE;AACrE,6EAA6E;AAC7E,2EAA2E;AAC3E,0EAA0E;AAC1E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,KAAK,GACT,wDAAwD;IACxD,sDAAsD,CAAC;AAOzD,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"plugin-update-cli.js","sourceRoot":"","sources":["../../src/commands/plugin-update-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,8EAA8E;AAC9E,qEAAqE;AACrE,6EAA6E;AAC7E,2EAA2E;AAC3E,0EAA0E;AAC1E,qEAAqE;AACrE,8EAA8E;AAE9E,MAAM,KAAK,GACT,wDAAwD;IACxD,sDAAsD,CAAC;AAOzD,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAc;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE/B,YAAY,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,EAAE,2BAA2B,EAAE;QACjF,EAAE;QACF,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,OAAO,KAAK,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,OAAO,mCAAmC,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAChD,YAAY,EAAE,IAAI,CAAC,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE;YAClF,EAAE;YACF,OAAO;YACP,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { execAsync } from '../utils/exec.js';
|
|
2
2
|
import { removeLockFile } from '../lockfile.js';
|
|
3
3
|
import { getReleaseChannel } from '../utils/release-channel.js';
|
|
4
|
+
import { createAgentApi } from '../api.js';
|
|
4
5
|
import { config } from '../config.js';
|
|
5
|
-
import { withEaccesRetry,
|
|
6
|
-
import {
|
|
6
|
+
import { withEaccesRetry, installAcSelf, AC_PACKAGE, } from '../utils/openclaw-ops.js';
|
|
7
|
+
import { runOpenclawStackUpdate } from '../utils/openclaw-stack-update.js';
|
|
7
8
|
import { logCollector } from '../connection.js';
|
|
8
|
-
import { toErrorMessage } from '../utils/response.js';
|
|
9
9
|
/**
|
|
10
10
|
* Run the explicit-version self-update flow. Throws when `installOpenclaw`
|
|
11
11
|
* or `installAcSelf` fail outright — per-plugin failures are recorded in
|
|
@@ -33,30 +33,14 @@ export async function runExplicitSelfUpdate(currentVersion, payload) {
|
|
|
33
33
|
});
|
|
34
34
|
// 1) openclaw runtime + plugins (one gateway restart at the end)
|
|
35
35
|
if (payload.openclaw) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
installed: pluginSummary.installed,
|
|
45
|
-
skipped: pluginSummary.skipped,
|
|
46
|
-
failed: pluginSummary.failed,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
const anyChanged = runtimeChanged || (pluginSummary?.installed.length ?? 0) > 0;
|
|
50
|
-
if (anyChanged) {
|
|
51
|
-
try {
|
|
52
|
-
await restartGateway();
|
|
53
|
-
gatewayRestarted = true;
|
|
54
|
-
logCollector?.push('self_update_gateway_restarted', 'info', 'Gateway restarted after openclaw stack update', {});
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
logCollector?.push('self_update_gateway_restart_failed', 'warn', `Gateway restart after openclaw stack update failed: ${toErrorMessage(err)}`, { error: toErrorMessage(err) });
|
|
58
|
-
}
|
|
59
|
-
}
|
|
36
|
+
const stack = await runOpenclawStackUpdate({
|
|
37
|
+
version: payload.openclaw.version,
|
|
38
|
+
plugins: payload.openclaw.plugins,
|
|
39
|
+
eventPrefix: 'self_update',
|
|
40
|
+
});
|
|
41
|
+
runtimeChanged = stack.runtimeChanged;
|
|
42
|
+
pluginSummary = stack.pluginSummary;
|
|
43
|
+
gatewayRestarted = stack.gatewayRestarted;
|
|
60
44
|
}
|
|
61
45
|
// 2) agent-controller swap LAST. Note: we run `npm install -g` here but
|
|
62
46
|
// do NOT remove the lockfile or sleep — the WS handler defers that
|
|
@@ -102,13 +86,12 @@ async function fetchRuntimeTargets() {
|
|
|
102
86
|
if (!backendUrl || !token)
|
|
103
87
|
return null;
|
|
104
88
|
try {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const data = (await res.json());
|
|
89
|
+
// Through AgentApi rather than a hand-rolled fetch, so this request shows
|
|
90
|
+
// up in debugLog tracing like every other backend call. The swallow is
|
|
91
|
+
// deliberate: any failure (401, 500, network, empty body) means "no
|
|
92
|
+
// explicit targets", and the caller falls back to the channel-based path.
|
|
93
|
+
const api = createAgentApi(backendUrl, token);
|
|
94
|
+
const data = (await api.get('/api/agent/runtime-targets'));
|
|
112
95
|
if (!data || (!data.openclaw && !data.agentController))
|
|
113
96
|
return null;
|
|
114
97
|
return data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,eAAe,EACf,aAAa,EACb,UAAU,GAEX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAwBhD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,cAAsB,EACtB,OAA0B;IAE1B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,aAA+C,CAAC;IACpD,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,YAAY,EAAE,IAAI,CAChB,2BAA2B,EAC3B,MAAM,EACN,6CAA6C,cAAc,GAAG,EAC9D;QACE,cAAc;QACd,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO;QAC1C,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO;QACzC,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;KACpD,CACF,CAAC;IAEF,iEAAiE;IACjE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC;YACzC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO;YACjC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO;YACjC,WAAW,EAAE,aAAa;SAC3B,CAAC,CAAC;QACH,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QACtC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACpC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAC5C,CAAC;IAED,wEAAwE;IACxE,sEAAsE;IACtE,wEAAwE;IACxE,iEAAiE;IACjE,IAAI,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;QACrC,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjF,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,EAAE,IAAI,CAChB,0BAA0B,EAC1B,MAAM,EACN,iCAAiC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,EAClE,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;AACxE,CAAC;AAED,8EAA8E;AAC9E,sEAAsE;AACtE,yEAAyE;AACzE,4CAA4C;AAC5C,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,cAAsB;IACrD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,cAAc,OAAO,GAAG,CAAC,CAAC;IAExE,MAAM,aAAa,GAAG,MAAM,eAAe,CACzC,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,UAAU,IAAI,GAAG,UAAU,EAAE,MAAM,CAAC,EAChE,sBAAsB,CACvB,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,KAAK,aAAa,EAAE,CAAC,CAAC;IAE1D,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,cAAc,OAAO,aAAa,KAAK,CAAC,CAAC;IACtE,MAAM,eAAe,CACnB,GAAG,EAAE,CAAC,SAAS,CAAC,kBAAkB,UAAU,IAAI,GAAG,EAAE,EAAE,OAAO,CAAC,EAC/D,gBAAgB,CACjB,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,2BAA2B,aAAa,8CAA8C,CACvF,CAAC;IACF,cAAc,EAAE,CAAC;IACjB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,sEAAsE;AACtE,wEAAwE;AACxE,8EAA8E;AAE9E,KAAK,UAAU,mBAAmB;IAChC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAChC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,0EAA0E;QAC1E,uEAAuE;QACvE,oEAAoE;QACpE,0EAA0E;QAC1E,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAsC,CAAC;QAChG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE,OAAO,IAAI,CAAC;QACpE,OAAO,IAAyB,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,cAAsB;IAC3D,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,cAAc,OAAO,GAAG,CAAC,CAAC;QAExE,yEAAyE;QACzE,uCAAuC;QACvC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CACf,WAAW,GAAG,CAAC;gBACb,CAAC,CAAC,YAAY,OAAO,CAAC,QAAQ,CAAC,OAAO,KAAK,WAAW,aAAa;gBACnE,CAAC,CAAC,YAAY,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAC3C,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,0BAA0B;QAC1B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,eAAe,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,eAAe,CAAC,OAAO,KAAK,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAEpE,yCAAyC;QACzC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;YAC/B,OAAO,CAAC,GAAG,CACT,4BAA4B,CAAC,CAAC,SAAS,CAAC,MAAM,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,SAAS,CACnH,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CACT,2BAA2B,OAAO,CAAC,eAAe,CAAC,OAAO,8CAA8C,CACzG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,eAAe,CAAC,OAAO,WAAW,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,cAAc,EAAE,CAAC;YACjB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,MAAM,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { createAgentApi } from '../api.js';
|
|
2
|
-
import { getBackendUrl
|
|
2
|
+
import { getBackendUrl } from '../utils/env.js';
|
|
3
|
+
import { requireConfig } from '../config.js';
|
|
3
4
|
import { getWorkspaceDir } from '../workspace.js';
|
|
4
|
-
import {
|
|
5
|
+
import { writeWorkspaceFiles } from '../utils/write-workspace-files.js';
|
|
5
6
|
export async function updateSkills() {
|
|
6
7
|
const backendUrl = getBackendUrl();
|
|
7
|
-
const agentToken =
|
|
8
|
-
const agentId =
|
|
8
|
+
const agentToken = requireConfig('agentToken');
|
|
9
|
+
const agentId = requireConfig('agentId');
|
|
9
10
|
const workspaceDir = getWorkspaceDir();
|
|
10
11
|
const api = createAgentApi(backendUrl, agentToken);
|
|
11
12
|
const data = await api.agentBootstrap(agentId);
|
|
@@ -14,7 +15,7 @@ export async function updateSkills() {
|
|
|
14
15
|
console.log('update_skills: no skills in bootstrap response, nothing to write');
|
|
15
16
|
return;
|
|
16
17
|
}
|
|
17
|
-
await
|
|
18
|
-
console.log(`update_skills: wrote ${
|
|
18
|
+
const wrote = await writeWorkspaceFiles(skills, workspaceDir);
|
|
19
|
+
console.log(`update_skills: wrote ${wrote} skill files`);
|
|
19
20
|
}
|
|
20
21
|
//# sourceMappingURL=update-skills.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-skills.js","sourceRoot":"","sources":["../../src/commands/update-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"update-skills.js","sourceRoot":"","sources":["../../src/commands/update-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,cAAc,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/config-file.d.ts
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
export declare const VM_ENV_PATH = "/opt/openclaw-cloud/agent-controller/.env";
|
|
3
3
|
export declare function getConfigDir(): string;
|
|
4
4
|
export declare function getConfigPath(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Serialize a dict to `KEY=VALUE` lines and write it 0600, creating the parent
|
|
7
|
+
* directory. The one writer for every env file we own (`agent.env` and the VM
|
|
8
|
+
* provisioner's `.env`) — these files carry AGENT_TOKEN and provider API keys,
|
|
9
|
+
* so the mode is not optional.
|
|
10
|
+
*/
|
|
11
|
+
export declare function writeEnvFile(filePath: string, vars: Record<string, string>): Promise<void>;
|
|
5
12
|
export declare function saveEnvFile(config: {
|
|
6
13
|
centrifugoUrl: string;
|
|
7
14
|
agentToken: string;
|
package/dist/config-file.js
CHANGED
|
@@ -13,6 +13,7 @@ const ENV_KEYS = [
|
|
|
13
13
|
'AC_RELEASE_CHANNEL',
|
|
14
14
|
'AC_DEBUG',
|
|
15
15
|
'AGENT_PROVIDER',
|
|
16
|
+
'AGENT_DEPLOY_TYPE',
|
|
16
17
|
'ANTHROPIC_API_KEY',
|
|
17
18
|
'ANTHROPIC_AUTH_TOKEN',
|
|
18
19
|
'CLAUDE_CODE_OAUTH_TOKEN',
|
|
@@ -28,20 +29,30 @@ export function getConfigDir() {
|
|
|
28
29
|
export function getConfigPath() {
|
|
29
30
|
return path.join(getConfigDir(), 'agent.env');
|
|
30
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Serialize a dict to `KEY=VALUE` lines and write it 0600, creating the parent
|
|
34
|
+
* directory. The one writer for every env file we own (`agent.env` and the VM
|
|
35
|
+
* provisioner's `.env`) — these files carry AGENT_TOKEN and provider API keys,
|
|
36
|
+
* so the mode is not optional.
|
|
37
|
+
*/
|
|
38
|
+
export async function writeEnvFile(filePath, vars) {
|
|
39
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
40
|
+
const content = Object.entries(vars)
|
|
41
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
42
|
+
.join('\n') + '\n';
|
|
43
|
+
await fs.writeFile(filePath, content, { mode: 0o600 });
|
|
44
|
+
}
|
|
31
45
|
export async function saveEnvFile(config) {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
`BACKEND_URL=${config.backendInternalUrl}`,
|
|
39
|
-
];
|
|
46
|
+
const vars = {
|
|
47
|
+
CENTRIFUGO_URL: config.centrifugoUrl,
|
|
48
|
+
AGENT_TOKEN: config.agentToken,
|
|
49
|
+
AGENT_ID: config.agentId,
|
|
50
|
+
BACKEND_URL: config.backendInternalUrl,
|
|
51
|
+
};
|
|
40
52
|
if (config.gatewayToken) {
|
|
41
|
-
|
|
53
|
+
vars.OPENCLAW_GATEWAY_TOKEN = config.gatewayToken;
|
|
42
54
|
}
|
|
43
|
-
|
|
44
|
-
await fs.writeFile(getConfigPath(), content, { mode: 0o600 });
|
|
55
|
+
await writeEnvFile(getConfigPath(), vars);
|
|
45
56
|
console.log(` Config saved to ${getConfigPath()}`);
|
|
46
57
|
}
|
|
47
58
|
async function loadFile(filePath) {
|
package/dist/config-file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,QAAQ,GAAG;IACf,gBAAgB;IAChB,aAAa;IACb,UAAU;IACV,sBAAsB;IACtB,aAAa;IACb,SAAS;IACT,cAAc;IACd,wBAAwB;IACxB,oBAAoB;IACpB,UAAU;IACV,gBAAgB;IAChB,mBAAmB;IACnB,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,mBAAmB;IACnB,kBAAkB;CACV,CAAC;AAEX,qCAAqC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAEvE,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,10 @@ import type { AgentCommand, AgentResponse } from '../types.js';
|
|
|
12
12
|
* command, regardless of how many things changed. Restart failure is
|
|
13
13
|
* a warn — install already succeeded.
|
|
14
14
|
*
|
|
15
|
+
* Steps 2-4 are `runOpenclawStackUpdate()`, shared with the self-update flow
|
|
16
|
+
* and the `agent-update` CLI. This handler owns only payload validation and
|
|
17
|
+
* the AgentResponse shape.
|
|
18
|
+
*
|
|
15
19
|
* Per-plugin failures are recorded in `data.failed[]` but DO NOT flip the
|
|
16
20
|
* top-level success flag. A whole-flow failure (e.g. installOpenclaw throws)
|
|
17
21
|
* does flip success to false.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { logCollector } from '../connection.js';
|
|
2
2
|
import { toErrorMessage } from '../utils/response.js';
|
|
3
|
-
import {
|
|
4
|
-
import { restartGateway } from '../utils/gateway-restart.js';
|
|
3
|
+
import { runOpenclawStackUpdate, } from '../utils/openclaw-stack-update.js';
|
|
5
4
|
/**
|
|
6
5
|
* Update the openclaw runtime + (optionally) a batch of plugins.
|
|
7
6
|
* payload: { version: string, plugins?: Array<{ id, version }> }
|
|
@@ -15,6 +14,10 @@ import { restartGateway } from '../utils/gateway-restart.js';
|
|
|
15
14
|
* command, regardless of how many things changed. Restart failure is
|
|
16
15
|
* a warn — install already succeeded.
|
|
17
16
|
*
|
|
17
|
+
* Steps 2-4 are `runOpenclawStackUpdate()`, shared with the self-update flow
|
|
18
|
+
* and the `agent-update` CLI. This handler owns only payload validation and
|
|
19
|
+
* the AgentResponse shape.
|
|
20
|
+
*
|
|
18
21
|
* Per-plugin failures are recorded in `data.failed[]` but DO NOT flip the
|
|
19
22
|
* top-level success flag. A whole-flow failure (e.g. installOpenclaw throws)
|
|
20
23
|
* does flip success to false.
|
|
@@ -39,15 +42,18 @@ export async function handleAgentUpdate(cmd) {
|
|
|
39
42
|
error: 'agent_update payload requires non-empty `version`',
|
|
40
43
|
};
|
|
41
44
|
}
|
|
42
|
-
let
|
|
43
|
-
let pluginSummary;
|
|
45
|
+
let stack;
|
|
44
46
|
try {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
:
|
|
47
|
+
stack = await runOpenclawStackUpdate({
|
|
48
|
+
version,
|
|
49
|
+
plugins,
|
|
50
|
+
eventPrefix: 'agent_update',
|
|
51
|
+
meta: { commandId: cmd.id },
|
|
52
|
+
});
|
|
49
53
|
}
|
|
50
54
|
catch (err) {
|
|
55
|
+
// installPlugins swallows per-plugin errors; anything thrown here is a
|
|
56
|
+
// whole-flow failure (installOpenclaw, or installPlugins blowing up).
|
|
51
57
|
return {
|
|
52
58
|
id: cmd.id,
|
|
53
59
|
type: cmd.type,
|
|
@@ -55,41 +61,7 @@ export async function handleAgentUpdate(cmd) {
|
|
|
55
61
|
error: toErrorMessage(err),
|
|
56
62
|
};
|
|
57
63
|
}
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
pluginSummary = await installPlugins(plugins);
|
|
61
|
-
logCollector?.push('agent_update_plugins_done', 'info', 'Plugin batch processed', {
|
|
62
|
-
commandId: cmd.id,
|
|
63
|
-
installed: pluginSummary.installed.length,
|
|
64
|
-
skipped: pluginSummary.skipped.length,
|
|
65
|
-
failed: pluginSummary.failed.length,
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
// installPlugins is supposed to swallow per-plugin errors; if it
|
|
70
|
-
// throws something globally, surface it.
|
|
71
|
-
return {
|
|
72
|
-
id: cmd.id,
|
|
73
|
-
type: cmd.type,
|
|
74
|
-
success: false,
|
|
75
|
-
error: toErrorMessage(err),
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
const installedPluginCount = pluginSummary?.installed.length ?? 0;
|
|
80
|
-
const anyChanged = runtimeChanged || installedPluginCount > 0;
|
|
81
|
-
let restarted = false;
|
|
82
|
-
let restartFailed = false;
|
|
83
|
-
if (anyChanged) {
|
|
84
|
-
try {
|
|
85
|
-
await restartGateway();
|
|
86
|
-
restarted = true;
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
restartFailed = true;
|
|
90
|
-
logCollector?.push('agent_update_restart_failed', 'warn', 'Gateway restart after agent_update failed', { commandId: cmd.id, error: toErrorMessage(err) });
|
|
91
|
-
}
|
|
92
|
-
}
|
|
64
|
+
const { runtimeChanged, pluginSummary } = stack;
|
|
93
65
|
return {
|
|
94
66
|
id: cmd.id,
|
|
95
67
|
type: cmd.type,
|
|
@@ -100,7 +72,7 @@ export async function handleAgentUpdate(cmd) {
|
|
|
100
72
|
installed: pluginSummary?.installed ?? [],
|
|
101
73
|
skipped: pluginSummary?.skipped ?? [],
|
|
102
74
|
failed: pluginSummary?.failed ?? [],
|
|
103
|
-
restarted:
|
|
75
|
+
restarted: stack.gatewayRestarted,
|
|
104
76
|
durationMs: Date.now() - startMs,
|
|
105
77
|
},
|
|
106
78
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-update.js","sourceRoot":"","sources":["../../src/handlers/agent-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"agent-update.js","sourceRoot":"","sources":["../../src/handlers/agent-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,sBAAsB,GAEvB,MAAM,mCAAmC,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAGjC,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5C,CAAC,CAAE,OAAO,CAAC,OAAkD;QAC7D,CAAC,CAAC,SAAS,CAAC;IAEd,YAAY,EAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,EAAE,wBAAwB,EAAE;QAC5E,SAAS,EAAE,GAAG,CAAC,EAAE;QACjB,OAAO;QACP,WAAW,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mDAAmD;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,KAAgC,CAAC;IACrC,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,sBAAsB,CAAC;YACnC,OAAO;YACP,OAAO;YACP,WAAW,EAAE,cAAc;YAC3B,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uEAAuE;QACvE,sEAAsE;QACtE,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAChD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,OAAO;YACP,cAAc;YACd,SAAS,EAAE,aAAa,EAAE,SAAS,IAAI,EAAE;YACzC,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,EAAE;YACrC,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,EAAE;YACnC,SAAS,EAAE,KAAK,CAAC,gBAAgB;YACjC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function handleDeploy(command: AgentCommand): Promise<AgentResponse>;
|
|
1
|
+
export { handleGatewayRestartCommand as handleDeploy } from '../utils/gateway-restart-handler.js';
|
package/dist/handlers/deploy.js
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
6
|
-
commandId: command.id,
|
|
7
|
-
});
|
|
8
|
-
const response = await handleGatewayRestartCommand(command);
|
|
9
|
-
const durationMs = Date.now() - startMs;
|
|
10
|
-
if (response.success) {
|
|
11
|
-
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
12
|
-
commandId: command.id,
|
|
13
|
-
durationMs,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: ${response.error ?? ''}`, { commandId: command.id, durationMs });
|
|
18
|
-
}
|
|
19
|
-
return response;
|
|
20
|
-
}
|
|
1
|
+
// See handlers/restart.ts — `deploy` is a gateway restart. The backend is
|
|
2
|
+
// expected to have installed the new runtime via agent_update / self_update
|
|
3
|
+
// first; this command only cycles the gateway.
|
|
4
|
+
export { handleGatewayRestartCommand as handleDeploy } from '../utils/gateway-restart-handler.js';
|
|
21
5
|
//# sourceMappingURL=deploy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/handlers/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/handlers/deploy.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,4EAA4E;AAC5E,+CAA+C;AAC/C,OAAO,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,qCAAqC,CAAC"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import { logCollector } from '../connection.js';
|
|
2
1
|
import { runDiagnostics } from '../utils/diagnostics.js';
|
|
3
2
|
export async function handleDiagnostics(command) {
|
|
4
|
-
const startMs = Date.now();
|
|
5
|
-
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
6
|
-
commandId: command.id,
|
|
7
|
-
});
|
|
8
3
|
const checks = command.payload.checks;
|
|
9
4
|
if (!Array.isArray(checks) || checks.length === 0) {
|
|
10
|
-
const durationMs = Date.now() - startMs;
|
|
11
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: Missing "checks" array in payload`, { commandId: command.id, durationMs });
|
|
12
5
|
return {
|
|
13
6
|
id: command.id,
|
|
14
7
|
type: 'diagnostics',
|
|
@@ -17,11 +10,6 @@ export async function handleDiagnostics(command) {
|
|
|
17
10
|
};
|
|
18
11
|
}
|
|
19
12
|
const results = await runDiagnostics(checks);
|
|
20
|
-
const durationMs = Date.now() - startMs;
|
|
21
|
-
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
22
|
-
commandId: command.id,
|
|
23
|
-
durationMs,
|
|
24
|
-
});
|
|
25
13
|
return {
|
|
26
14
|
id: command.id,
|
|
27
15
|
type: 'diagnostics',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/handlers/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/handlers/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAqB;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAA8B,CAAC;IAE9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mCAAmC;SAC3C,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,EAAE,OAAO,EAAE;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
|
-
import
|
|
3
|
-
import { getWorkspaceDir } from '../workspace.js';
|
|
2
|
+
import { getWorkspaceDir, resolveInsideWorkspace } from '../workspace.js';
|
|
4
3
|
import { toErrorMessage } from '../utils/response.js';
|
|
5
4
|
import { logCollector } from '../connection.js';
|
|
6
5
|
export async function handleFileDelete(command) {
|
|
@@ -13,15 +12,15 @@ export async function handleFileDelete(command) {
|
|
|
13
12
|
error: 'Missing "path" in payload',
|
|
14
13
|
};
|
|
15
14
|
}
|
|
16
|
-
|
|
15
|
+
const resolvedPath = resolveInsideWorkspace(getWorkspaceDir(), filePath);
|
|
16
|
+
if (!resolvedPath) {
|
|
17
17
|
return {
|
|
18
18
|
id: command.id,
|
|
19
19
|
type: 'file_delete',
|
|
20
20
|
success: false,
|
|
21
|
-
error: 'Invalid path: must
|
|
21
|
+
error: 'Invalid path: must stay inside the workspace',
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
const resolvedPath = path.join(getWorkspaceDir(), filePath);
|
|
25
24
|
try {
|
|
26
25
|
await fs.unlink(resolvedPath);
|
|
27
26
|
logCollector?.push('file_delete', 'info', `File deleted: ${filePath}`, { path: filePath });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-delete.js","sourceRoot":"","sources":["../../src/handlers/file-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-delete.js","sourceRoot":"","sources":["../../src/handlers/file-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAqB;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAc,CAAC;IAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,2BAA2B;SACnC,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,8CAA8C;SACtD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3F,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;SAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { getWorkspaceDir } from '../workspace.js';
|
|
3
|
+
import { getWorkspaceDir, resolveInsideWorkspace } from '../workspace.js';
|
|
4
4
|
import { toErrorMessage } from '../utils/response.js';
|
|
5
5
|
import { logCollector } from '../connection.js';
|
|
6
6
|
export async function handleFileWrite(command) {
|
|
@@ -16,15 +16,15 @@ export async function handleFileWrite(command) {
|
|
|
16
16
|
error: 'Missing "path" or "content" in payload',
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
const resolvedPath = resolveInsideWorkspace(getWorkspaceDir(), filePath);
|
|
20
|
+
if (!resolvedPath) {
|
|
20
21
|
return {
|
|
21
22
|
id: command.id,
|
|
22
23
|
type: 'file_write',
|
|
23
24
|
success: false,
|
|
24
|
-
error: 'Invalid path: must
|
|
25
|
+
error: 'Invalid path: must stay inside the workspace',
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
|
-
const resolvedPath = path.join(getWorkspaceDir(), filePath);
|
|
28
28
|
try {
|
|
29
29
|
if (!overwrite) {
|
|
30
30
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-write.js","sourceRoot":"","sources":["../../src/handlers/file-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-write.js","sourceRoot":"","sources":["../../src/handlers/file-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAqB;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAc,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;IACxC,MAAM,SAAS,GAAI,OAAO,CAAC,OAAO,CAAC,SAAiC,IAAI,IAAI,CAAC;IAC7E,MAAM,UAAU,GAAI,OAAO,CAAC,OAAO,CAAC,UAAkC,IAAI,KAAK,CAAC;IAEhF,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,wCAAwC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,8CAA8C;SACtD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC9B,qBAAqB;gBACrB,OAAO;oBACL,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,IAAI,EAAE,YAAY;oBAClB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;iBAC5D,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAiB,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,iBAAiB,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE1F,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;SAC5C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -2,16 +2,8 @@ import { pushKnowledgeToBackend } from '../utils/knowledge-push.js';
|
|
|
2
2
|
import { toErrorMessage } from '../utils/response.js';
|
|
3
3
|
import { logCollector } from '../connection.js';
|
|
4
4
|
export async function handleKnowledgeSync(command, api, agentId) {
|
|
5
|
-
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
6
|
-
commandId: command.id,
|
|
7
|
-
});
|
|
8
|
-
const startMs = Date.now();
|
|
9
5
|
const paths = command.payload.paths;
|
|
10
6
|
if (paths !== undefined && !Array.isArray(paths)) {
|
|
11
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: invalid paths payload`, {
|
|
12
|
-
commandId: command.id,
|
|
13
|
-
durationMs: Date.now() - startMs,
|
|
14
|
-
});
|
|
15
7
|
return {
|
|
16
8
|
id: command.id,
|
|
17
9
|
type: 'knowledge_sync',
|
|
@@ -21,9 +13,9 @@ export async function handleKnowledgeSync(command, api, agentId) {
|
|
|
21
13
|
}
|
|
22
14
|
try {
|
|
23
15
|
const { filesRead, filesUpdated } = await pushKnowledgeToBackend(api, agentId, paths);
|
|
24
|
-
|
|
16
|
+
// Domain event: the file counts. Lifecycle events come from connection.ts.
|
|
17
|
+
logCollector?.push('knowledge_sync', 'info', 'Knowledge synced to backend', {
|
|
25
18
|
commandId: command.id,
|
|
26
|
-
durationMs: Date.now() - startMs,
|
|
27
19
|
filesRead,
|
|
28
20
|
filesUpdated,
|
|
29
21
|
});
|
|
@@ -35,10 +27,6 @@ export async function handleKnowledgeSync(command, api, agentId) {
|
|
|
35
27
|
};
|
|
36
28
|
}
|
|
37
29
|
catch (e) {
|
|
38
|
-
logCollector?.push('command_failed', 'error', `${command.type} failed: ${toErrorMessage(e)}`, {
|
|
39
|
-
commandId: command.id,
|
|
40
|
-
durationMs: Date.now() - startMs,
|
|
41
|
-
});
|
|
42
30
|
return {
|
|
43
31
|
id: command.id,
|
|
44
32
|
type: 'knowledge_sync',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-sync.js","sourceRoot":"","sources":["../../src/handlers/knowledge-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAqB,EACrB,GAAa,EACb,OAAe;IAEf,
|
|
1
|
+
{"version":3,"file":"knowledge-sync.js","sourceRoot":"","sources":["../../src/handlers/knowledge-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAqB,EACrB,GAAa,EACb,OAAe;IAEf,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAA6B,CAAC;IAC5D,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,qDAAqD;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtF,2EAA2E;QAC3E,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,6BAA6B,EAAE;YAC1E,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,SAAS;YACT,YAAY;SACb,CAAC,CAAC;QACH,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;SAClC,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;SACzB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -10,4 +10,14 @@ export declare function wireMemoryDeltaLogging(manager: KnowledgeGraphManager):
|
|
|
10
10
|
* Create WS command handlers for memory operations.
|
|
11
11
|
* All 9 handlers delegate to the shared KnowledgeGraphManager instance.
|
|
12
12
|
*/
|
|
13
|
-
export declare function createMemoryHandlers(manager: KnowledgeGraphManager):
|
|
13
|
+
export declare function createMemoryHandlers(manager: KnowledgeGraphManager): {
|
|
14
|
+
memory_create_entities: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
15
|
+
memory_create_relations: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
16
|
+
memory_add_observations: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
17
|
+
memory_delete_entities: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
18
|
+
memory_delete_observations: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
19
|
+
memory_delete_relations: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
20
|
+
memory_read_graph: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
21
|
+
memory_search_nodes: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
22
|
+
memory_open_nodes: (cmd: AgentCommand) => Promise<AgentResponse>;
|
|
23
|
+
};
|