nextclaw 0.34.0 → 0.35.0
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/cli/app/index.js +31 -33
- package/dist/cli/app/index.js.map +1 -1
- package/package.json +10 -10
- package/ui-dist/assets/{api-a_GaOFc7.js → api-Dket1cmq.js} +1 -1
- package/ui-dist/assets/{appearance-settings-page-Bpd2RhK5.js → appearance-settings-page-CfwDf9ag.js} +1 -1
- package/ui-dist/assets/{channels-list-page-CTblam4c.js → channels-list-page-Dyn83ZlS.js} +1 -1
- package/ui-dist/assets/{chat-page-Bg3_X8G9.js → chat-page-CL0IMvgF.js} +1 -1
- package/ui-dist/assets/{config-split-page-ps1Aod3g.js → config-split-page-D4D4HFhq.js} +1 -1
- package/ui-dist/assets/{confirm-dialog-DJSUNG33.js → confirm-dialog-Cv6-9Nnj.js} +1 -1
- package/ui-dist/assets/{desktop-update-config-D9AyIhJZ.js → desktop-update-config-Bckgulvm.js} +1 -1
- package/ui-dist/assets/{dist-BkTYNzm_.js → dist-Bh_tj3FN.js} +1 -1
- package/ui-dist/assets/{dist-DkR7_Dpl.js → dist-BrRgjiq1.js} +1 -1
- package/ui-dist/assets/{doc-browser-Q67TOGVS.js → doc-browser-BlWjhmnM.js} +1 -1
- package/ui-dist/assets/doc-browser-Da9hDsoQ.js +1 -0
- package/ui-dist/assets/{doc-browser-context-BQim8SqD.js → doc-browser-context-NGYa66Xg.js} +1 -1
- package/ui-dist/assets/{form-actions-B2-bpFie.js → form-actions-CeKgh4SQ.js} +1 -1
- package/ui-dist/assets/{index-VQAVqwG8.js → index-Bz5yNMXA.js} +30 -30
- package/ui-dist/assets/loader-circle-DLp2jNIf.js +1 -0
- package/ui-dist/assets/mcp-marketplace-page-CIWbjXM8.js +1 -0
- package/ui-dist/assets/{mcp-marketplace-page-w8panjZG.js → mcp-marketplace-page-DfNmMqKs.js} +1 -1
- package/ui-dist/assets/{model-config-page-B8Aubkwx.js → model-config-page-DHzyDV5v.js} +1 -1
- package/ui-dist/assets/{navigation-link-mpHFXwRr.js → navigation-link-CzGgQGi_.js} +1 -1
- package/ui-dist/assets/plus-Dfj3tJ_m.js +1 -0
- package/ui-dist/assets/{provider-scoped-model-input-BRnIH-5O.js → provider-scoped-model-input-CjrHwzFb.js} +1 -1
- package/ui-dist/assets/{providers-config-page-0r9AZNNZ.js → providers-config-page-ZPvJWHFN.js} +1 -1
- package/ui-dist/assets/{react-BlXwvOLo.js → react-BXRf96P-.js} +1 -1
- package/ui-dist/assets/{refresh-cw-JFuyDj_P.js → refresh-cw-ChKuqgPR.js} +1 -1
- package/ui-dist/assets/remote-C2enAZbs.js +1 -0
- package/ui-dist/assets/rotate-cw-BGkZpcc7.js +1 -0
- package/ui-dist/assets/{runtime-config-page-BgeYpvMK.js → runtime-config-page-CGpPQD8K.js} +1 -1
- package/ui-dist/assets/{save-BL8P8CLX.js → save-BWGNAKV5.js} +1 -1
- package/ui-dist/assets/{search-bZL75Pgc.js → search-DFcT_9wJ.js} +1 -1
- package/ui-dist/assets/{search-config-page-CzNzLyd0.js → search-config-page-DBBzVAQZ.js} +1 -1
- package/ui-dist/assets/{secrets-config-page-C4k3ik0v.js → secrets-config-page-bnJ8sIB7.js} +1 -1
- package/ui-dist/assets/security-config-CfbXSpgX.js +1 -0
- package/ui-dist/assets/{select-rUZ8nIZu.js → select-BnNrv8si.js} +1 -1
- package/ui-dist/assets/{settings-2-BI4SCkxQ.js → settings-2-CFHrgKTX.js} +1 -1
- package/ui-dist/assets/skeleton-tfWhGuJT.js +1 -0
- package/ui-dist/assets/{tag-chip-BdI_yIOA.js → tag-chip-L5w4xfS7.js} +1 -1
- package/ui-dist/assets/x-BCSE3LCQ.js +1 -0
- package/ui-dist/index.html +18 -18
- package/ui-dist/assets/doc-browser-DahzJEWj.js +0 -1
- package/ui-dist/assets/loader-circle-DyXZU92l.js +0 -1
- package/ui-dist/assets/mcp-marketplace-page-B0dBE5CV.js +0 -1
- package/ui-dist/assets/plus-Dhb4KuMH.js +0 -1
- package/ui-dist/assets/remote-DQzE55WW.js +0 -1
- package/ui-dist/assets/rotate-cw-DjbbiIW_.js +0 -1
- package/ui-dist/assets/security-config-DmJw9QZA.js +0 -1
- package/ui-dist/assets/skeleton-CVmEPG43.js +0 -1
- package/ui-dist/assets/x-BcEayhV6.js +0 -1
package/dist/cli/app/index.js
CHANGED
|
@@ -4,16 +4,16 @@ import { createRequire } from "node:module";
|
|
|
4
4
|
import { APP_NAME, APP_TAGLINE, getConfigPath, getDataDir, getRunPath, loadConfig, resolveConfigSecrets } from "@nextclaw/core";
|
|
5
5
|
import { Command, InvalidArgumentError } from "commander";
|
|
6
6
|
import { constants, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
7
|
-
import { randomBytes } from "node:crypto";
|
|
7
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
8
8
|
import { execFile } from "node:child_process";
|
|
9
9
|
import path, { join, resolve } from "node:path";
|
|
10
10
|
import { tmpdir } from "node:os";
|
|
11
11
|
import "@nextclaw/server";
|
|
12
12
|
import { NextclawDistributionService, NextclawServiceRuntime, readLearningLoopRuntimeConfig } from "@nextclaw/service";
|
|
13
|
-
import {
|
|
13
|
+
import { AppHomeService, AppInstanceStorageService, AppPublishService, AppPublishValidationService } from "@nextclaw/app-runtime";
|
|
14
14
|
import { McpServiceAppRuntimeService, buildServiceActionId, getServiceAppManifestPath, mergeServiceAppRuntimeActions, readServiceAppManifest } from "@nextclaw/kernel";
|
|
15
|
+
import { access, mkdtemp, readFile, rm, stat } from "node:fs/promises";
|
|
15
16
|
import { promisify } from "node:util";
|
|
16
|
-
import { AppPublishService, AppPublishValidationService } from "@nextclaw/app-runtime";
|
|
17
17
|
var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
18
18
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
19
19
|
//#endregion
|
|
@@ -2020,7 +2020,7 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
2020
2020
|
const http$1 = __require("http");
|
|
2021
2021
|
const net = __require("net");
|
|
2022
2022
|
const tls = __require("tls");
|
|
2023
|
-
const { randomBytes: randomBytes$1, createHash: createHash$
|
|
2023
|
+
const { randomBytes: randomBytes$1, createHash: createHash$2 } = __require("crypto");
|
|
2024
2024
|
const { Duplex: Duplex$2, Readable } = __require("stream");
|
|
2025
2025
|
const { URL: URL$1 } = __require("url");
|
|
2026
2026
|
const PerMessageDeflate = require_permessage_deflate();
|
|
@@ -2672,7 +2672,7 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
2672
2672
|
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
2673
2673
|
return;
|
|
2674
2674
|
}
|
|
2675
|
-
const digest = createHash$
|
|
2675
|
+
const digest = createHash$2("sha1").update(key + GUID).digest("base64");
|
|
2676
2676
|
if (res.headers["sec-websocket-accept"] !== digest) {
|
|
2677
2677
|
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
2678
2678
|
return;
|
|
@@ -3144,7 +3144,7 @@ var require_websocket_server = /* @__PURE__ */ __commonJSMin(((exports, module)
|
|
|
3144
3144
|
const EventEmitter = __require("events");
|
|
3145
3145
|
const http = __require("http");
|
|
3146
3146
|
const { Duplex } = __require("stream");
|
|
3147
|
-
const { createHash } = __require("crypto");
|
|
3147
|
+
const { createHash: createHash$1 } = __require("crypto");
|
|
3148
3148
|
const extension = require_extension();
|
|
3149
3149
|
const PerMessageDeflate = require_permessage_deflate();
|
|
3150
3150
|
const subprotocol = require_subprotocol();
|
|
@@ -3403,7 +3403,7 @@ var require_websocket_server = /* @__PURE__ */ __commonJSMin(((exports, module)
|
|
|
3403
3403
|
"HTTP/1.1 101 Switching Protocols",
|
|
3404
3404
|
"Upgrade: websocket",
|
|
3405
3405
|
"Connection: Upgrade",
|
|
3406
|
-
`Sec-WebSocket-Accept: ${createHash("sha1").update(key + GUID).digest("base64")}`
|
|
3406
|
+
`Sec-WebSocket-Accept: ${createHash$1("sha1").update(key + GUID).digest("base64")}`
|
|
3407
3407
|
];
|
|
3408
3408
|
const ws = new this.options.WebSocket(null, void 0, this.options);
|
|
3409
3409
|
if (protocols.size) {
|
|
@@ -3633,6 +3633,7 @@ const registerHostServiceControls = ({ program, nextclaw }) => {
|
|
|
3633
3633
|
//#endregion
|
|
3634
3634
|
//#region src/cli/app/services/service-app-dev.service.ts
|
|
3635
3635
|
var ServiceAppDevService = class {
|
|
3636
|
+
instanceStorageService = new AppInstanceStorageService();
|
|
3636
3637
|
constructor(params = {}) {
|
|
3637
3638
|
this.params = params;
|
|
3638
3639
|
}
|
|
@@ -3643,14 +3644,14 @@ var ServiceAppDevService = class {
|
|
|
3643
3644
|
if (!loaded) return this.buildDevReport(appPath, void 0, [], issues);
|
|
3644
3645
|
if (this.hasErrors(issues)) return this.buildDevReport(appPath, this.toServiceAppRecord(appPath, loaded.manifest, this.idleRuntimeStatus), [], issues);
|
|
3645
3646
|
const runtime = this.createRuntimeService();
|
|
3646
|
-
const
|
|
3647
|
+
const storage = await this.createDevStorage(appPath, loaded.manifest.id);
|
|
3647
3648
|
try {
|
|
3648
|
-
const startRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime,
|
|
3649
|
+
const startRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
|
|
3649
3650
|
const runtimeActions = await runtime.listActions({
|
|
3650
3651
|
app: startRecord,
|
|
3651
3652
|
manifest: loaded.manifest
|
|
3652
3653
|
});
|
|
3653
|
-
const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime,
|
|
3654
|
+
const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
|
|
3654
3655
|
const actions = mergeServiceAppRuntimeActions({
|
|
3655
3656
|
record,
|
|
3656
3657
|
manifest: loaded.manifest,
|
|
@@ -3659,14 +3660,7 @@ var ServiceAppDevService = class {
|
|
|
3659
3660
|
this.collectRuntimeIssues(record, actions, issues);
|
|
3660
3661
|
return this.buildDevReport(appPath, record, actions, issues);
|
|
3661
3662
|
} finally {
|
|
3662
|
-
|
|
3663
|
-
await runtime.dispose();
|
|
3664
|
-
} finally {
|
|
3665
|
-
await rm(dataDirectory, {
|
|
3666
|
-
recursive: true,
|
|
3667
|
-
force: true
|
|
3668
|
-
});
|
|
3669
|
-
}
|
|
3663
|
+
await runtime.dispose();
|
|
3670
3664
|
}
|
|
3671
3665
|
};
|
|
3672
3666
|
call = async (target, actionName, input) => {
|
|
@@ -3686,19 +3680,19 @@ var ServiceAppDevService = class {
|
|
|
3686
3680
|
return this.buildCallReport(appPath, record, void 0, void 0, issues);
|
|
3687
3681
|
}
|
|
3688
3682
|
const runtime = this.createRuntimeService();
|
|
3689
|
-
const
|
|
3683
|
+
const storage = await this.createDevStorage(appPath, loaded.manifest.id);
|
|
3690
3684
|
try {
|
|
3691
|
-
const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime,
|
|
3685
|
+
const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
|
|
3692
3686
|
const result = await runtime.invokeAction({
|
|
3693
3687
|
app: record,
|
|
3694
3688
|
manifest: loaded.manifest,
|
|
3695
3689
|
actionName: action,
|
|
3696
3690
|
input
|
|
3697
3691
|
});
|
|
3698
|
-
const nextRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime,
|
|
3692
|
+
const nextRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
|
|
3699
3693
|
return this.buildCallReport(appPath, nextRecord, buildServiceActionId(loaded.manifest.id, action), result, issues);
|
|
3700
3694
|
} catch (error) {
|
|
3701
|
-
const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime,
|
|
3695
|
+
const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
|
|
3702
3696
|
issues.push({
|
|
3703
3697
|
severity: "error",
|
|
3704
3698
|
code: "service.runtime.callFailed",
|
|
@@ -3706,14 +3700,7 @@ var ServiceAppDevService = class {
|
|
|
3706
3700
|
});
|
|
3707
3701
|
return this.buildCallReport(appPath, record, buildServiceActionId(loaded.manifest.id, action), void 0, issues);
|
|
3708
3702
|
} finally {
|
|
3709
|
-
|
|
3710
|
-
await runtime.dispose();
|
|
3711
|
-
} finally {
|
|
3712
|
-
await rm(dataDirectory, {
|
|
3713
|
-
recursive: true,
|
|
3714
|
-
force: true
|
|
3715
|
-
});
|
|
3716
|
-
}
|
|
3703
|
+
await runtime.dispose();
|
|
3717
3704
|
}
|
|
3718
3705
|
};
|
|
3719
3706
|
loadServiceApp = async (appPath, issues) => {
|
|
@@ -3745,8 +3732,16 @@ var ServiceAppDevService = class {
|
|
|
3745
3732
|
return resolveConfigSecrets(loadConfig(configPath), { configPath });
|
|
3746
3733
|
};
|
|
3747
3734
|
idleRuntimeStatus = { getStatus: () => ({ status: "idle" }) };
|
|
3748
|
-
|
|
3749
|
-
|
|
3735
|
+
createDevStorage = async (appPath, appId) => {
|
|
3736
|
+
const sourceId = createHash("sha256").update(appPath).digest("hex").slice(0, 16);
|
|
3737
|
+
const instanceDirectory = path.join(new AppHomeService().getAppHomeDirectory(), "dev-instances", appId, sourceId, "default");
|
|
3738
|
+
return (await this.instanceStorageService.materialize({
|
|
3739
|
+
appId,
|
|
3740
|
+
instanceId: "default",
|
|
3741
|
+
instanceDirectory
|
|
3742
|
+
})).storage;
|
|
3743
|
+
};
|
|
3744
|
+
toServiceAppRecord = (dirPath, manifest, runtime, storage) => {
|
|
3750
3745
|
const runtimeStatus = runtime.getStatus(manifest.id);
|
|
3751
3746
|
const record = {
|
|
3752
3747
|
id: manifest.id,
|
|
@@ -3759,7 +3754,10 @@ var ServiceAppDevService = class {
|
|
|
3759
3754
|
enabled: manifest.enabled,
|
|
3760
3755
|
protocol: manifest.protocol,
|
|
3761
3756
|
status: manifest.enabled ? runtimeStatus.status : "stopped",
|
|
3762
|
-
dataDirectory
|
|
3757
|
+
dataDirectory: storage?.dataDirectory,
|
|
3758
|
+
instanceId: storage?.instanceId,
|
|
3759
|
+
storage,
|
|
3760
|
+
isolation: "full-user"
|
|
3763
3761
|
};
|
|
3764
3762
|
if (manifest.description) record.description = manifest.description;
|
|
3765
3763
|
if (runtimeStatus.lastError) record.lastError = runtimeStatus.lastError;
|