nextclaw 0.13.10 → 0.13.12
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/index.js +60 -51
- package/package.json +7 -7
package/dist/cli/index.js
CHANGED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
setPluginRuntimeBridge as setPluginRuntimeBridge2
|
|
30
30
|
} from "@nextclaw/openclaw-compat";
|
|
31
31
|
import { existsSync as existsSync12, mkdirSync as mkdirSync7, readFileSync as readFileSync10, writeFileSync as writeFileSync6 } from "fs";
|
|
32
|
-
import { join as
|
|
32
|
+
import { join as join9, resolve as resolve12 } from "path";
|
|
33
33
|
import { createInterface as createInterface3 } from "readline";
|
|
34
34
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
35
35
|
import { spawn as spawn4 } from "child_process";
|
|
@@ -3415,7 +3415,7 @@ var RemoteCommands = class {
|
|
|
3415
3415
|
// src/cli/commands/diagnostics.ts
|
|
3416
3416
|
import { createServer as createNetServer } from "net";
|
|
3417
3417
|
import { existsSync as existsSync6, readFileSync as readFileSync6 } from "fs";
|
|
3418
|
-
import { resolve as resolve8 } from "path";
|
|
3418
|
+
import { join as join4, resolve as resolve8 } from "path";
|
|
3419
3419
|
import {
|
|
3420
3420
|
APP_NAME as APP_NAME2,
|
|
3421
3421
|
getConfigPath as getConfigPath5,
|
|
@@ -3556,6 +3556,11 @@ var DiagnosticsCommands = class {
|
|
|
3556
3556
|
status: report.workspaceExists ? "pass" : "warn",
|
|
3557
3557
|
detail: report.workspacePath
|
|
3558
3558
|
},
|
|
3559
|
+
{
|
|
3560
|
+
name: "ui-assets",
|
|
3561
|
+
status: report.uiAssets.indexHtmlPresent ? "pass" : "fail",
|
|
3562
|
+
detail: report.uiAssets.resolvedStaticDir ? `${report.uiAssets.resolvedStaticDir} (${report.uiAssets.indexHtmlPresent ? "index.html found" : "index.html missing"})` : "no UI static directory resolved"
|
|
3563
|
+
},
|
|
3559
3564
|
{
|
|
3560
3565
|
name: "service-state",
|
|
3561
3566
|
status: report.process.staleState ? "fail" : report.process.running ? "pass" : "warn",
|
|
@@ -3624,6 +3629,8 @@ var DiagnosticsCommands = class {
|
|
|
3624
3629
|
const configuredUi = resolveUiConfig(config2, { enabled: true, host: config2.ui.host, port: config2.ui.port });
|
|
3625
3630
|
const configuredUiUrl = resolveUiApiBase(configuredUi.host, configuredUi.port);
|
|
3626
3631
|
const configuredApiUrl = `${configuredUiUrl}/api`;
|
|
3632
|
+
const resolvedStaticDir = serviceState?.uiStaticDir ?? resolveUiStaticDir();
|
|
3633
|
+
const indexHtmlPresent = Boolean(resolvedStaticDir && existsSync6(join4(resolvedStaticDir, "index.html")));
|
|
3627
3634
|
const managedUiUrl = serviceState?.uiUrl ?? null;
|
|
3628
3635
|
const managedApiUrl = serviceState?.apiUrl ?? null;
|
|
3629
3636
|
const managedHealth = running && managedApiUrl ? await this.probeApiHealth(`${managedApiUrl}/health`) : { state: "unreachable", detail: "service not running" };
|
|
@@ -3658,6 +3665,10 @@ var DiagnosticsCommands = class {
|
|
|
3658
3665
|
providers,
|
|
3659
3666
|
serviceStatePath,
|
|
3660
3667
|
serviceStateExists: existsSync6(serviceStatePath),
|
|
3668
|
+
uiAssets: {
|
|
3669
|
+
resolvedStaticDir,
|
|
3670
|
+
indexHtmlPresent
|
|
3671
|
+
},
|
|
3661
3672
|
fixActions,
|
|
3662
3673
|
process: {
|
|
3663
3674
|
managedByState,
|
|
@@ -3757,7 +3768,11 @@ var DiagnosticsCommands = class {
|
|
|
3757
3768
|
params.issues.push("A service appears healthy on configured API endpoint, but state is missing/stale.");
|
|
3758
3769
|
params.recommendations.push("Another process may be occupying the UI port; stop it or use --ui-port with a free port.");
|
|
3759
3770
|
}
|
|
3760
|
-
if (
|
|
3771
|
+
if (params.running && !params.serviceState?.uiStaticDir) {
|
|
3772
|
+
params.issues.push("Managed service did not record a resolved UI static asset directory.");
|
|
3773
|
+
params.recommendations.push(`Check logs at ${params.serviceState?.logPath ?? resolveServiceLogPath()} and verify packaged ui-dist assets exist.`);
|
|
3774
|
+
}
|
|
3775
|
+
if (!params.running && !params.providers.some((provider) => provider.configured)) {
|
|
3761
3776
|
params.recommendations.push("Configure at least one provider API key in UI or config before expecting agent replies.");
|
|
3762
3777
|
}
|
|
3763
3778
|
}
|
|
@@ -3807,7 +3822,7 @@ import {
|
|
|
3807
3822
|
} from "@nextclaw/openclaw-compat";
|
|
3808
3823
|
import { startUiServer } from "@nextclaw/server";
|
|
3809
3824
|
import { appendFileSync, closeSync, cpSync as cpSync2, existsSync as existsSync10, mkdirSync as mkdirSync5, openSync } from "fs";
|
|
3810
|
-
import { dirname as dirname2, join as
|
|
3825
|
+
import { dirname as dirname2, join as join7, resolve as resolve10 } from "path";
|
|
3811
3826
|
import { spawn as spawn3 } from "child_process";
|
|
3812
3827
|
import { request as httpRequest } from "http";
|
|
3813
3828
|
import { request as httpsRequest } from "https";
|
|
@@ -4288,7 +4303,7 @@ var MissingProvider = class extends LLMProvider {
|
|
|
4288
4303
|
// src/cli/commands/service-marketplace-installer.ts
|
|
4289
4304
|
import { getWorkspacePath as getWorkspacePath5, loadConfig as loadConfig12 } from "@nextclaw/core";
|
|
4290
4305
|
import { existsSync as existsSync8, rmSync as rmSync4 } from "fs";
|
|
4291
|
-
import { join as
|
|
4306
|
+
import { join as join5 } from "path";
|
|
4292
4307
|
|
|
4293
4308
|
// src/cli/commands/service-marketplace-helpers.ts
|
|
4294
4309
|
var containsAbsoluteFsPath = (line) => {
|
|
@@ -4491,7 +4506,7 @@ var ServiceMarketplaceInstaller = class {
|
|
|
4491
4506
|
}
|
|
4492
4507
|
async uninstallSkill(slug) {
|
|
4493
4508
|
const workspace = getWorkspacePath5(loadConfig12().agents.defaults.workspace);
|
|
4494
|
-
const targetDir =
|
|
4509
|
+
const targetDir = join5(workspace, "skills", slug);
|
|
4495
4510
|
if (!existsSync8(targetDir)) {
|
|
4496
4511
|
throw new Error(`Skill not installed in workspace: ${slug}`);
|
|
4497
4512
|
}
|
|
@@ -6484,7 +6499,7 @@ async function createUiNcpAgent(params) {
|
|
|
6484
6499
|
// src/cli/commands/service-remote-runtime.ts
|
|
6485
6500
|
import { RemoteServiceModule } from "@nextclaw/remote";
|
|
6486
6501
|
function createManagedRemoteModule(params) {
|
|
6487
|
-
if (!params.
|
|
6502
|
+
if (!params.uiEnabled) {
|
|
6488
6503
|
return null;
|
|
6489
6504
|
}
|
|
6490
6505
|
return new RemoteServiceModule({
|
|
@@ -6508,6 +6523,7 @@ function writeInitialManagedServiceState(params) {
|
|
|
6508
6523
|
uiHost: params.snapshot.uiHost,
|
|
6509
6524
|
uiPort: params.snapshot.uiPort,
|
|
6510
6525
|
logPath: params.snapshot.logPath,
|
|
6526
|
+
uiStaticDir: params.snapshot.uiStaticDir ?? null,
|
|
6511
6527
|
startupLastProbeError: null,
|
|
6512
6528
|
startupTimeoutMs: params.readinessTimeoutMs,
|
|
6513
6529
|
startupCheckedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -6524,6 +6540,7 @@ function writeReadyManagedServiceState(params) {
|
|
|
6524
6540
|
uiHost: params.snapshot.uiHost,
|
|
6525
6541
|
uiPort: params.snapshot.uiPort,
|
|
6526
6542
|
logPath: params.snapshot.logPath,
|
|
6543
|
+
uiStaticDir: params.snapshot.uiStaticDir ?? currentState?.uiStaticDir ?? null,
|
|
6527
6544
|
startupState: params.readiness.ready ? "ready" : "degraded",
|
|
6528
6545
|
startupLastProbeError: params.readiness.lastProbeError,
|
|
6529
6546
|
startupTimeoutMs: params.readinessTimeoutMs,
|
|
@@ -6855,13 +6872,13 @@ function createRemoteAccessHost(params) {
|
|
|
6855
6872
|
|
|
6856
6873
|
// src/cli/commands/ui-chat-run-coordinator.ts
|
|
6857
6874
|
import { existsSync as existsSync9, mkdirSync as mkdirSync4, readdirSync as readdirSync2, readFileSync as readFileSync8, writeFileSync as writeFileSync4 } from "fs";
|
|
6858
|
-
import { join as
|
|
6875
|
+
import { join as join6 } from "path";
|
|
6859
6876
|
import {
|
|
6860
6877
|
getDataDir as getDataDir6,
|
|
6861
6878
|
parseAgentScopedSessionKey as parseAgentScopedSessionKey2,
|
|
6862
6879
|
safeFilename
|
|
6863
6880
|
} from "@nextclaw/core";
|
|
6864
|
-
var RUNS_DIR =
|
|
6881
|
+
var RUNS_DIR = join6(getDataDir6(), "runs");
|
|
6865
6882
|
var NON_TERMINAL_STATES = /* @__PURE__ */ new Set(["queued", "running"]);
|
|
6866
6883
|
var DEFAULT_SESSION_TYPE = "native";
|
|
6867
6884
|
var SESSION_TYPE_METADATA_KEY = "session_type";
|
|
@@ -7387,7 +7404,7 @@ var UiChatRunCoordinator = class {
|
|
|
7387
7404
|
};
|
|
7388
7405
|
}
|
|
7389
7406
|
getRunPath(runId) {
|
|
7390
|
-
return
|
|
7407
|
+
return join6(RUNS_DIR, `${safeFilename(runId)}.json`);
|
|
7391
7408
|
}
|
|
7392
7409
|
persistRun(run) {
|
|
7393
7410
|
const persisted = {
|
|
@@ -7416,7 +7433,7 @@ var UiChatRunCoordinator = class {
|
|
|
7416
7433
|
if (!entry.isFile() || !entry.name.endsWith(".json")) {
|
|
7417
7434
|
continue;
|
|
7418
7435
|
}
|
|
7419
|
-
const path2 =
|
|
7436
|
+
const path2 = join6(RUNS_DIR, entry.name);
|
|
7420
7437
|
try {
|
|
7421
7438
|
const parsed = JSON.parse(readFileSync8(path2, "utf-8"));
|
|
7422
7439
|
const runId = readOptionalString(parsed.runId);
|
|
@@ -7522,7 +7539,7 @@ var ServiceCommands = class {
|
|
|
7522
7539
|
});
|
|
7523
7540
|
const sessionManager = new SessionManager(workspace);
|
|
7524
7541
|
let pluginGatewayHandles = [];
|
|
7525
|
-
const cronStorePath =
|
|
7542
|
+
const cronStorePath = join7(getDataDir7(), "cron", "jobs.json");
|
|
7526
7543
|
const cron2 = new CronService2(cronStorePath);
|
|
7527
7544
|
const uiConfig = resolveUiConfig(config2, options.uiOverrides);
|
|
7528
7545
|
const uiStaticDir = options.uiStaticDir === void 0 ? resolveUiStaticDir() : options.uiStaticDir;
|
|
@@ -7705,7 +7722,7 @@ var ServiceCommands = class {
|
|
|
7705
7722
|
accountId
|
|
7706
7723
|
})
|
|
7707
7724
|
);
|
|
7708
|
-
const remoteModule = createManagedRemoteModule({ config: config2, localOrigin });
|
|
7725
|
+
const remoteModule = createManagedRemoteModule({ config: config2, uiEnabled: uiConfig.enabled, localOrigin });
|
|
7709
7726
|
await startGatewaySupportServices({
|
|
7710
7727
|
cronJobs: cron2.status().jobs,
|
|
7711
7728
|
remoteModule,
|
|
@@ -7918,23 +7935,15 @@ var ServiceCommands = class {
|
|
|
7918
7935
|
if (existing) {
|
|
7919
7936
|
clearServiceState();
|
|
7920
7937
|
}
|
|
7938
|
+
const logPath = resolveServiceLogPath();
|
|
7939
|
+
const logDir = resolve10(logPath, "..");
|
|
7940
|
+
mkdirSync5(logDir, { recursive: true });
|
|
7941
|
+
const staticDirDescription = staticDir ? `staticDir=${staticDir}` : "staticDir=<missing>";
|
|
7942
|
+
this.appendStartupStage(logPath, `ui asset resolution: ${staticDirDescription}`);
|
|
7921
7943
|
if (!staticDir) {
|
|
7922
7944
|
console.log("Warning: UI frontend not found in package assets.");
|
|
7923
7945
|
}
|
|
7924
7946
|
const healthUrl = `${apiUrl}/health`;
|
|
7925
|
-
const portPreflight = await this.checkUiPortPreflight({
|
|
7926
|
-
host: uiConfig.host,
|
|
7927
|
-
port: uiConfig.port,
|
|
7928
|
-
healthUrl
|
|
7929
|
-
});
|
|
7930
|
-
if (!portPreflight.ok) {
|
|
7931
|
-
console.error(`Error: Cannot start ${APP_NAME3} because UI port ${uiConfig.port} is already occupied.`);
|
|
7932
|
-
console.error(portPreflight.message);
|
|
7933
|
-
return;
|
|
7934
|
-
}
|
|
7935
|
-
const logPath = resolveServiceLogPath();
|
|
7936
|
-
const logDir = resolve10(logPath, "..");
|
|
7937
|
-
mkdirSync5(logDir, { recursive: true });
|
|
7938
7947
|
const logFd = openSync(logPath, "a");
|
|
7939
7948
|
const readinessTimeoutMs = this.resolveStartupTimeoutMs(options.startupTimeoutMs);
|
|
7940
7949
|
const quickPhaseTimeoutMs = Math.min(8e3, readinessTimeoutMs);
|
|
@@ -7968,7 +7977,7 @@ var ServiceCommands = class {
|
|
|
7968
7977
|
writeInitialManagedServiceState({
|
|
7969
7978
|
config: config2,
|
|
7970
7979
|
readinessTimeoutMs,
|
|
7971
|
-
snapshot: { pid: child.pid, uiUrl, apiUrl, uiHost: uiConfig.host, uiPort: uiConfig.port, logPath }
|
|
7980
|
+
snapshot: { pid: child.pid, uiUrl, apiUrl, uiHost: uiConfig.host, uiPort: uiConfig.port, logPath, uiStaticDir: staticDir }
|
|
7972
7981
|
});
|
|
7973
7982
|
this.appendStartupStage(logPath, `health probe started: ${healthUrl} (phase=quick, timeoutMs=${quickPhaseTimeoutMs})`);
|
|
7974
7983
|
let readiness = await this.waitForBackgroundServiceReady({
|
|
@@ -8496,8 +8505,8 @@ var ServiceCommands = class {
|
|
|
8496
8505
|
}
|
|
8497
8506
|
installBuiltinMarketplaceSkill(slug, force) {
|
|
8498
8507
|
const workspace = getWorkspacePath9(loadConfig14().agents.defaults.workspace);
|
|
8499
|
-
const destination =
|
|
8500
|
-
const destinationSkillFile =
|
|
8508
|
+
const destination = join7(workspace, "skills", slug);
|
|
8509
|
+
const destinationSkillFile = join7(destination, "SKILL.md");
|
|
8501
8510
|
if (existsSync10(destinationSkillFile) && !force) {
|
|
8502
8511
|
return {
|
|
8503
8512
|
message: `${slug} is already installed`
|
|
@@ -8513,7 +8522,7 @@ var ServiceCommands = class {
|
|
|
8513
8522
|
}
|
|
8514
8523
|
return null;
|
|
8515
8524
|
}
|
|
8516
|
-
mkdirSync5(
|
|
8525
|
+
mkdirSync5(join7(workspace, "skills"), { recursive: true });
|
|
8517
8526
|
cpSync2(dirname2(builtin.path), destination, { recursive: true, force: true });
|
|
8518
8527
|
return {
|
|
8519
8528
|
message: `Installed skill: ${slug}`
|
|
@@ -8575,7 +8584,7 @@ ${stderr}`.trim();
|
|
|
8575
8584
|
// src/cli/workspace.ts
|
|
8576
8585
|
import { cpSync as cpSync3, existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync9, readdirSync as readdirSync3, rmSync as rmSync5, writeFileSync as writeFileSync5 } from "fs";
|
|
8577
8586
|
import { createRequire as createRequire2 } from "module";
|
|
8578
|
-
import { dirname as dirname3, join as
|
|
8587
|
+
import { dirname as dirname3, join as join8, resolve as resolve11 } from "path";
|
|
8579
8588
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
8580
8589
|
import { APP_NAME as APP_NAME4, getDataDir as getDataDir8 } from "@nextclaw/core";
|
|
8581
8590
|
import { spawnSync as spawnSync3 } from "child_process";
|
|
@@ -8605,11 +8614,11 @@ var WorkspaceManager = class {
|
|
|
8605
8614
|
{ source: "memory/MEMORY.md", target: "memory/MEMORY.md" }
|
|
8606
8615
|
];
|
|
8607
8616
|
for (const entry of templateFiles) {
|
|
8608
|
-
const filePath =
|
|
8617
|
+
const filePath = join8(workspace, entry.target);
|
|
8609
8618
|
if (!force && existsSync11(filePath)) {
|
|
8610
8619
|
continue;
|
|
8611
8620
|
}
|
|
8612
|
-
const templatePath =
|
|
8621
|
+
const templatePath = join8(templateDir, entry.source);
|
|
8613
8622
|
if (!existsSync11(templatePath)) {
|
|
8614
8623
|
console.warn(`Warning: Template file missing: ${templatePath}`);
|
|
8615
8624
|
continue;
|
|
@@ -8620,15 +8629,15 @@ var WorkspaceManager = class {
|
|
|
8620
8629
|
writeFileSync5(filePath, content);
|
|
8621
8630
|
created.push(entry.target);
|
|
8622
8631
|
}
|
|
8623
|
-
const memoryDir =
|
|
8632
|
+
const memoryDir = join8(workspace, "memory");
|
|
8624
8633
|
if (!existsSync11(memoryDir)) {
|
|
8625
8634
|
mkdirSync6(memoryDir, { recursive: true });
|
|
8626
|
-
created.push(
|
|
8635
|
+
created.push(join8("memory", ""));
|
|
8627
8636
|
}
|
|
8628
|
-
const skillsDir =
|
|
8637
|
+
const skillsDir = join8(workspace, "skills");
|
|
8629
8638
|
if (!existsSync11(skillsDir)) {
|
|
8630
8639
|
mkdirSync6(skillsDir, { recursive: true });
|
|
8631
|
-
created.push(
|
|
8640
|
+
created.push(join8("skills", ""));
|
|
8632
8641
|
}
|
|
8633
8642
|
const seeded = this.seedBuiltinSkills(skillsDir, { force });
|
|
8634
8643
|
if (seeded > 0) {
|
|
@@ -8647,11 +8656,11 @@ var WorkspaceManager = class {
|
|
|
8647
8656
|
if (!entry.isDirectory()) {
|
|
8648
8657
|
continue;
|
|
8649
8658
|
}
|
|
8650
|
-
const src =
|
|
8651
|
-
if (!existsSync11(
|
|
8659
|
+
const src = join8(sourceDir, entry.name);
|
|
8660
|
+
if (!existsSync11(join8(src, "SKILL.md"))) {
|
|
8652
8661
|
continue;
|
|
8653
8662
|
}
|
|
8654
|
-
const dest =
|
|
8663
|
+
const dest = join8(targetDir, entry.name);
|
|
8655
8664
|
if (!force && existsSync11(dest)) {
|
|
8656
8665
|
continue;
|
|
8657
8666
|
}
|
|
@@ -8670,11 +8679,11 @@ var WorkspaceManager = class {
|
|
|
8670
8679
|
const require3 = createRequire2(import.meta.url);
|
|
8671
8680
|
const entry = require3.resolve("@nextclaw/core");
|
|
8672
8681
|
const pkgRoot = resolve11(dirname3(entry), "..");
|
|
8673
|
-
const distSkills =
|
|
8682
|
+
const distSkills = join8(pkgRoot, "dist", "skills");
|
|
8674
8683
|
if (existsSync11(distSkills)) {
|
|
8675
8684
|
return distSkills;
|
|
8676
8685
|
}
|
|
8677
|
-
const srcSkills =
|
|
8686
|
+
const srcSkills = join8(pkgRoot, "src", "agent", "skills");
|
|
8678
8687
|
if (existsSync11(srcSkills)) {
|
|
8679
8688
|
return srcSkills;
|
|
8680
8689
|
}
|
|
@@ -8690,7 +8699,7 @@ var WorkspaceManager = class {
|
|
|
8690
8699
|
}
|
|
8691
8700
|
const cliDir = resolve11(fileURLToPath4(new URL(".", import.meta.url)));
|
|
8692
8701
|
const pkgRoot = resolve11(cliDir, "..", "..");
|
|
8693
|
-
const candidates = [
|
|
8702
|
+
const candidates = [join8(pkgRoot, "templates")];
|
|
8694
8703
|
for (const candidate of candidates) {
|
|
8695
8704
|
if (existsSync11(candidate)) {
|
|
8696
8705
|
return candidate;
|
|
@@ -8699,8 +8708,8 @@ var WorkspaceManager = class {
|
|
|
8699
8708
|
return null;
|
|
8700
8709
|
}
|
|
8701
8710
|
getBridgeDir() {
|
|
8702
|
-
const userBridge =
|
|
8703
|
-
if (existsSync11(
|
|
8711
|
+
const userBridge = join8(getDataDir8(), "bridge");
|
|
8712
|
+
if (existsSync11(join8(userBridge, "dist", "index.js"))) {
|
|
8704
8713
|
return userBridge;
|
|
8705
8714
|
}
|
|
8706
8715
|
if (!which("npm")) {
|
|
@@ -8709,12 +8718,12 @@ var WorkspaceManager = class {
|
|
|
8709
8718
|
}
|
|
8710
8719
|
const cliDir = resolve11(fileURLToPath4(new URL(".", import.meta.url)));
|
|
8711
8720
|
const pkgRoot = resolve11(cliDir, "..", "..");
|
|
8712
|
-
const pkgBridge =
|
|
8713
|
-
const srcBridge =
|
|
8721
|
+
const pkgBridge = join8(pkgRoot, "bridge");
|
|
8722
|
+
const srcBridge = join8(pkgRoot, "..", "..", "bridge");
|
|
8714
8723
|
let source = null;
|
|
8715
|
-
if (existsSync11(
|
|
8724
|
+
if (existsSync11(join8(pkgBridge, "package.json"))) {
|
|
8716
8725
|
source = pkgBridge;
|
|
8717
|
-
} else if (existsSync11(
|
|
8726
|
+
} else if (existsSync11(join8(srcBridge, "package.json"))) {
|
|
8718
8727
|
source = srcBridge;
|
|
8719
8728
|
}
|
|
8720
8729
|
if (!source) {
|
|
@@ -9009,7 +9018,7 @@ var CliRuntime = class {
|
|
|
9009
9018
|
}
|
|
9010
9019
|
const config2 = loadConfig15();
|
|
9011
9020
|
const workspaceSetting = config2.agents.defaults.workspace;
|
|
9012
|
-
const workspacePath = !workspaceSetting || workspaceSetting === DEFAULT_WORKSPACE_PATH ?
|
|
9021
|
+
const workspacePath = !workspaceSetting || workspaceSetting === DEFAULT_WORKSPACE_PATH ? join9(getDataDir9(), DEFAULT_WORKSPACE_DIR) : expandHome2(workspaceSetting);
|
|
9013
9022
|
const workspaceExisted = existsSync12(workspacePath);
|
|
9014
9023
|
mkdirSync7(workspacePath, { recursive: true });
|
|
9015
9024
|
const templateResult = this.workspaceManager.createWorkspaceTemplates(
|
|
@@ -9202,7 +9211,7 @@ ${this.logo} ${APP_NAME5} is ready! (${source})`);
|
|
|
9202
9211
|
`${this.logo} Interactive mode (type exit or Ctrl+C to quit)
|
|
9203
9212
|
`
|
|
9204
9213
|
);
|
|
9205
|
-
const historyFile =
|
|
9214
|
+
const historyFile = join9(getDataDir9(), "history", "cli_history");
|
|
9206
9215
|
const historyDir = resolve12(historyFile, "..");
|
|
9207
9216
|
mkdirSync7(historyDir, { recursive: true });
|
|
9208
9217
|
const history = existsSync12(historyFile) ? readFileSync10(historyFile, "utf-8").split("\n").filter(Boolean) : [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nextclaw",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.12",
|
|
4
4
|
"description": "Lightweight personal AI assistant with CLI, multi-provider routing, and channel integrations.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -40,15 +40,15 @@
|
|
|
40
40
|
"commander": "^12.1.0",
|
|
41
41
|
"yaml": "^2.8.1",
|
|
42
42
|
"@nextclaw/core": "0.9.5",
|
|
43
|
-
"@nextclaw/mcp": "0.1.
|
|
44
|
-
"@nextclaw/ncp": "0.
|
|
45
|
-
"@nextclaw/
|
|
43
|
+
"@nextclaw/mcp": "0.1.11",
|
|
44
|
+
"@nextclaw/ncp-mcp": "0.1.11",
|
|
45
|
+
"@nextclaw/remote": "0.1.7",
|
|
46
46
|
"@nextclaw/ncp-agent-runtime": "0.2.1",
|
|
47
|
+
"@nextclaw/ncp": "0.3.1",
|
|
47
48
|
"@nextclaw/ncp-toolkit": "0.4.1",
|
|
48
|
-
"@nextclaw/remote": "0.1.6",
|
|
49
|
-
"@nextclaw/runtime": "0.2.5",
|
|
50
49
|
"@nextclaw/openclaw-compat": "0.3.8",
|
|
51
|
-
"@nextclaw/server": "0.10.
|
|
50
|
+
"@nextclaw/server": "0.10.11",
|
|
51
|
+
"@nextclaw/runtime": "0.2.5"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/node": "^20.17.6",
|