clawconnect-agent 0.1.6 → 0.1.7
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/README.md +83 -7
- package/README.zh-CN.md +93 -17
- package/dist/commands/install.js +10 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/local-handlers.js +0 -28
- package/dist/commands/local-handlers.js.map +1 -1
- package/dist/commands/pair.d.ts +2 -0
- package/dist/commands/pair.js +17 -6
- package/dist/commands/pair.js.map +1 -1
- package/dist/commands/run.js +13 -16
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/send-file.d.ts +2 -0
- package/dist/commands/send-file.js +6 -0
- package/dist/commands/send-file.js.map +1 -1
- package/dist/commands/status.d.ts +13 -1
- package/dist/commands/status.js +58 -15
- package/dist/commands/status.js.map +1 -1
- package/dist/config/config.d.ts +6 -11
- package/dist/config/config.js +19 -48
- package/dist/config/config.js.map +1 -1
- package/dist/config/env.d.ts +1 -1
- package/dist/config/env.js +4 -5
- package/dist/config/env.js.map +1 -1
- package/dist/config/profile.d.ts +11 -0
- package/dist/config/profile.js +80 -0
- package/dist/config/profile.js.map +1 -0
- package/dist/gateway-profiles.d.ts +8 -0
- package/dist/gateway-profiles.js +24 -0
- package/dist/gateway-profiles.js.map +1 -0
- package/dist/hermes/hermes-relay-manager.d.ts +49 -0
- package/dist/hermes/hermes-relay-manager.js +636 -0
- package/dist/hermes/hermes-relay-manager.js.map +1 -0
- package/dist/hermes/hermes-runtime.d.ts +8 -0
- package/dist/hermes/hermes-runtime.js +8 -0
- package/dist/hermes/hermes-runtime.js.map +1 -0
- package/dist/hermes/hermes-session-store.d.ts +15 -0
- package/dist/hermes/hermes-session-store.js +152 -0
- package/dist/hermes/hermes-session-store.js.map +1 -0
- package/dist/hermes/hermes-voice-input.d.ts +13 -0
- package/dist/hermes/hermes-voice-input.js +27 -0
- package/dist/hermes/hermes-voice-input.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-artifacts.d.ts +3 -0
- package/dist/hermes/models/hermes-runtime-artifacts.js +65 -0
- package/dist/hermes/models/hermes-runtime-artifacts.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-backups.d.ts +5 -0
- package/dist/hermes/models/hermes-runtime-backups.js +128 -0
- package/dist/hermes/models/hermes-runtime-backups.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-chat.d.ts +40 -0
- package/dist/hermes/models/hermes-runtime-chat.js +623 -0
- package/dist/hermes/models/hermes-runtime-chat.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-command-router.d.ts +2 -0
- package/dist/hermes/models/hermes-runtime-command-router.js +93 -0
- package/dist/hermes/models/hermes-runtime-command-router.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-command-utils.d.ts +3 -0
- package/dist/hermes/models/hermes-runtime-command-utils.js +19 -0
- package/dist/hermes/models/hermes-runtime-command-utils.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-cron.d.ts +11 -0
- package/dist/hermes/models/hermes-runtime-cron.js +301 -0
- package/dist/hermes/models/hermes-runtime-cron.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-lifecycle.d.ts +9 -0
- package/dist/hermes/models/hermes-runtime-lifecycle.js +111 -0
- package/dist/hermes/models/hermes-runtime-lifecycle.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-models.d.ts +29 -0
- package/dist/hermes/models/hermes-runtime-models.js +125 -0
- package/dist/hermes/models/hermes-runtime-models.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-process.d.ts +22 -0
- package/dist/hermes/models/hermes-runtime-process.js +130 -0
- package/dist/hermes/models/hermes-runtime-process.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-sessions.d.ts +5 -0
- package/dist/hermes/models/hermes-runtime-sessions.js +71 -0
- package/dist/hermes/models/hermes-runtime-sessions.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-skills.d.ts +13 -0
- package/dist/hermes/models/hermes-runtime-skills.js +322 -0
- package/dist/hermes/models/hermes-runtime-skills.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-types.d.ts +19 -0
- package/dist/hermes/models/hermes-runtime-types.js +2 -0
- package/dist/hermes/models/hermes-runtime-types.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-usage.d.ts +22 -0
- package/dist/hermes/models/hermes-runtime-usage.js +211 -0
- package/dist/hermes/models/hermes-runtime-usage.js.map +1 -0
- package/dist/hermes/models/hermes-runtime-values.d.ts +14 -0
- package/dist/hermes/models/hermes-runtime-values.js +105 -0
- package/dist/hermes/models/hermes-runtime-values.js.map +1 -0
- package/dist/i18n/index.js +4 -0
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.js +115 -9
- package/dist/index.js.map +1 -1
- package/dist/platform/service-manager-common.d.ts +5 -2
- package/dist/platform/service-manager-common.js +18 -7
- package/dist/platform/service-manager-common.js.map +1 -1
- package/dist/platform/service-manager.d.ts +16 -5
- package/dist/platform/service-manager.js +85 -50
- package/dist/platform/service-manager.js.map +1 -1
- package/dist/relay/chat-history.js +18 -0
- package/dist/relay/chat-history.js.map +1 -1
- package/dist/relay/gateway-client.js +4 -3
- package/dist/relay/gateway-client.js.map +1 -1
- package/dist/relay/mobile-chat-run-bridge.d.ts +93 -0
- package/dist/relay/mobile-chat-run-bridge.js +68 -0
- package/dist/relay/mobile-chat-run-bridge.js.map +1 -0
- package/dist/relay/openclaw-voice-input.d.ts +13 -0
- package/dist/relay/openclaw-voice-input.js +18 -0
- package/dist/relay/openclaw-voice-input.js.map +1 -0
- package/dist/relay/relay-manager.d.ts +0 -3
- package/dist/relay/relay-manager.js +39 -170
- package/dist/relay/relay-manager.js.map +1 -1
- package/dist/relay/session-context.js +11 -1
- package/dist/relay/session-context.js.map +1 -1
- package/dist/relay/slash-command-catalog.d.ts +1 -1
- package/dist/relay/slash-command-catalog.generated.d.ts +0 -5
- package/dist/relay/slash-command-catalog.generated.js +0 -6
- package/dist/relay/slash-command-catalog.generated.js.map +1 -1
- package/dist/relay/voice-input.d.ts +11 -0
- package/dist/relay/voice-input.js +118 -0
- package/dist/relay/voice-input.js.map +1 -0
- package/dist/runtime-adapters.d.ts +19 -0
- package/dist/runtime-adapters.js +39 -0
- package/dist/runtime-adapters.js.map +1 -0
- package/package.json +3 -3
- package/dist/commands/voice-reply.d.ts +0 -39
- package/dist/commands/voice-reply.js +0 -329
- package/dist/commands/voice-reply.js.map +0 -1
- package/dist/relay/voice-reply-preference.d.ts +0 -25
- package/dist/relay/voice-reply-preference.js +0 -103
- package/dist/relay/voice-reply-preference.js.map +0 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { errorMessageWithOutput, runHermes, runHermesPython, } from "./hermes-runtime-process.js";
|
|
2
|
+
import { normalizeModelId, normalizedProviderMatches, readHermesConfigSnapshot, readHermesStatusSnapshot, } from "./hermes-runtime-usage.js";
|
|
3
|
+
import { compactStringArray, stringValue, toRecord, } from "./hermes-runtime-values.js";
|
|
4
|
+
export async function runHermesModelList() {
|
|
5
|
+
try {
|
|
6
|
+
const config = readHermesConfigSnapshot();
|
|
7
|
+
const current = readHermesStatusSnapshot();
|
|
8
|
+
const payload = readHermesModelOptionsPayload();
|
|
9
|
+
return hermesModelListResultFromPayload(payload, current, config);
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
return { ok: false, error: errorMessageWithOutput(error) };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function runHermesModelSelect(params) {
|
|
16
|
+
const record = params && typeof params === "object" && !Array.isArray(params)
|
|
17
|
+
? params
|
|
18
|
+
: {};
|
|
19
|
+
const providerId = typeof record.providerId === "string" ? record.providerId.trim() : "";
|
|
20
|
+
const modelId = typeof record.modelId === "string" ? record.modelId.trim() : "";
|
|
21
|
+
const modelAlias = typeof record.modelAlias === "string" ? record.modelAlias.trim() : "";
|
|
22
|
+
const modelName = typeof record.modelName === "string" ? record.modelName.trim() : "";
|
|
23
|
+
const resolvedModel = modelId || modelAlias || modelName;
|
|
24
|
+
if (!resolvedModel) {
|
|
25
|
+
return { ok: false, error: "modelId is required" };
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
runHermes(["config", "set", "model.default", resolvedModel], 10_000);
|
|
29
|
+
if (providerId) {
|
|
30
|
+
runHermes(["config", "set", "model.provider", providerId], 10_000);
|
|
31
|
+
}
|
|
32
|
+
const snapshot = readHermesStatusSnapshot();
|
|
33
|
+
return {
|
|
34
|
+
ok: true,
|
|
35
|
+
payload: {
|
|
36
|
+
providerId: providerId || snapshot.provider,
|
|
37
|
+
modelId: resolvedModel,
|
|
38
|
+
modelAlias: modelAlias || modelName || resolvedModel,
|
|
39
|
+
currentModel: snapshot.currentModel ?? resolvedModel,
|
|
40
|
+
provider: snapshot.provider ?? providerId,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function hermesModelListResultFromPayload(payload, current = {}, config = {}) {
|
|
49
|
+
const items = dedupeModelItems(modelItemsFromHermesModelOptionsPayload(payload, current, config));
|
|
50
|
+
if (items.length === 0) {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
error: hermesInventoryError(payload) ?? "Hermes model inventory returned no configured usable models.",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return { ok: true, payload: { items } };
|
|
57
|
+
}
|
|
58
|
+
function readHermesModelOptionsPayload() {
|
|
59
|
+
const output = runHermesPython([
|
|
60
|
+
"import json",
|
|
61
|
+
"from hermes_cli.inventory import build_models_payload, load_picker_context",
|
|
62
|
+
"print(json.dumps(build_models_payload(load_picker_context(), max_models=200), ensure_ascii=False))",
|
|
63
|
+
].join("\n"));
|
|
64
|
+
return toRecord(JSON.parse(output));
|
|
65
|
+
}
|
|
66
|
+
export function modelItemsFromHermesModelOptionsPayload(payload, current = {}, config = {}) {
|
|
67
|
+
const record = toRecord(payload);
|
|
68
|
+
const providers = Array.isArray(record.providers) ? record.providers.map(toRecord) : [];
|
|
69
|
+
const selectedProvider = stringValue(record.provider) ?? current.provider ?? config.provider;
|
|
70
|
+
const selectedModel = stringValue(record.model) ?? current.currentModel ?? config.model;
|
|
71
|
+
const items = [];
|
|
72
|
+
for (const provider of providers) {
|
|
73
|
+
const providerId = stringValue(provider.slug)
|
|
74
|
+
?? stringValue(provider.providerId)
|
|
75
|
+
?? stringValue(provider.id)
|
|
76
|
+
?? stringValue(provider.name);
|
|
77
|
+
if (!providerId) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const providerName = stringValue(provider.name) ?? providerId;
|
|
81
|
+
const models = Array.isArray(provider.models)
|
|
82
|
+
? provider.models.filter((model) => typeof model === "string" && model.trim().length > 0)
|
|
83
|
+
: [];
|
|
84
|
+
const providerIsSelected = provider.is_current === true || normalizedProviderMatches(providerId, selectedProvider);
|
|
85
|
+
for (const modelId of models) {
|
|
86
|
+
const selected = providerIsSelected && normalizeModelId(modelId) === normalizeModelId(selectedModel);
|
|
87
|
+
items.push({
|
|
88
|
+
providerId,
|
|
89
|
+
provider: providerName,
|
|
90
|
+
modelId,
|
|
91
|
+
alias: modelId,
|
|
92
|
+
name: modelId,
|
|
93
|
+
contextWindow: "--",
|
|
94
|
+
tags: compactStringArray([
|
|
95
|
+
modelId,
|
|
96
|
+
stringValue(provider.source),
|
|
97
|
+
provider.is_user_defined === true ? "user-config" : undefined,
|
|
98
|
+
]),
|
|
99
|
+
isSelected: selected,
|
|
100
|
+
isDefault: selected,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return items;
|
|
105
|
+
}
|
|
106
|
+
function dedupeModelItems(items) {
|
|
107
|
+
const seen = new Set();
|
|
108
|
+
const result = [];
|
|
109
|
+
for (const item of items) {
|
|
110
|
+
const key = `${item.providerId}\0${item.modelId}`;
|
|
111
|
+
if (seen.has(key)) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
seen.add(key);
|
|
115
|
+
result.push(item);
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
function hermesInventoryError(payload) {
|
|
120
|
+
const record = toRecord(payload);
|
|
121
|
+
return stringValue(record.error)
|
|
122
|
+
?? stringValue(record.message)
|
|
123
|
+
?? stringValue(record.detail);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=hermes-runtime-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-runtime-models.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const IS_WINDOWS: boolean;
|
|
2
|
+
export declare const HERMES_INBOX_DIR: string;
|
|
3
|
+
export declare const HERMES_HOME_DIR: string;
|
|
4
|
+
export declare const HERMES_CRON_JOBS_FILE: string;
|
|
5
|
+
export declare const HERMES_LOG_DIR: string;
|
|
6
|
+
export declare const HERMES_AGENT_LOG_FILE: string;
|
|
7
|
+
export declare const HERMES_MODELS_DEV_CACHE_FILE: string;
|
|
8
|
+
export declare const DEFAULT_TIMEOUT_MS = 120000;
|
|
9
|
+
export declare const CHAT_TIMEOUT_MS: number;
|
|
10
|
+
export declare const HERMES_TYPING_MARKER = "[[clawlink:typing]]";
|
|
11
|
+
export declare const CLAWCONNECT_MOBILE_BRIDGE_HINT: string;
|
|
12
|
+
export declare const SUBPROCESS_ENV: NodeJS.ProcessEnv;
|
|
13
|
+
export declare function resolveHermesBin(): string;
|
|
14
|
+
export declare function runHermes(args: string[], timeoutMs?: number): string;
|
|
15
|
+
export declare function runHermesWithInput(args: string[], input: string, timeoutMs?: number): string;
|
|
16
|
+
export declare function stripHermesSessionResumeNotices(output: string): string;
|
|
17
|
+
export declare function stripHermesSecurityReviewNotices(output: string): string;
|
|
18
|
+
export declare function sanitizeHermesChatOutput(output: string): string;
|
|
19
|
+
export declare function stripAnsi(text: string): string;
|
|
20
|
+
export declare function errorMessageWithOutput(error: unknown): string;
|
|
21
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
22
|
+
export declare function runHermesPython(script: string, extraEnv?: NodeJS.ProcessEnv): string;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { execFileSync, execSync } from "child_process";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
export const IS_WINDOWS = process.platform === "win32";
|
|
6
|
+
export const HERMES_INBOX_DIR = join(homedir(), ".clawconnect", "hermes", "inbox");
|
|
7
|
+
export const HERMES_HOME_DIR = process.env.HERMES_HOME?.trim() || join(homedir(), ".hermes");
|
|
8
|
+
export const HERMES_CRON_JOBS_FILE = join(HERMES_HOME_DIR, "cron", "jobs.json");
|
|
9
|
+
export const HERMES_LOG_DIR = join(HERMES_HOME_DIR, "logs");
|
|
10
|
+
export const HERMES_AGENT_LOG_FILE = join(HERMES_LOG_DIR, "agent.log");
|
|
11
|
+
export const HERMES_MODELS_DEV_CACHE_FILE = join(HERMES_HOME_DIR, "models_dev_cache.json");
|
|
12
|
+
export const DEFAULT_TIMEOUT_MS = 120_000;
|
|
13
|
+
export const CHAT_TIMEOUT_MS = 30 * 60_000;
|
|
14
|
+
export const HERMES_TYPING_MARKER = "[[clawlink:typing]]";
|
|
15
|
+
export const CLAWCONNECT_MOBILE_BRIDGE_HINT = [
|
|
16
|
+
"[ClawConnect mobile bridge]",
|
|
17
|
+
"You are connected to a mobile chat client through ClawConnect.",
|
|
18
|
+
"Only when the latest user request explicitly asks you to send, upload, attach, or share a local image or file, include its absolute local file path in your final answer.",
|
|
19
|
+
"ClawConnect uploads supported file paths only for those explicit send requests.",
|
|
20
|
+
"If the user is asking about capabilities, skills, file listings, or past work, do not repeat old file paths as sendable attachments.",
|
|
21
|
+
"Do not say you cannot send attachments merely because you are running in a CLI environment.",
|
|
22
|
+
].join(" ");
|
|
23
|
+
export const SUBPROCESS_ENV = {
|
|
24
|
+
...process.env,
|
|
25
|
+
HOME: homedir(),
|
|
26
|
+
PATH: [
|
|
27
|
+
join(homedir(), ".local", "bin"),
|
|
28
|
+
join(homedir(), ".hermes", "bin"),
|
|
29
|
+
join(homedir(), ".npm-global", "bin"),
|
|
30
|
+
process.env.PNPM_HOME,
|
|
31
|
+
join(homedir(), ".local", "share", "pnpm"),
|
|
32
|
+
"/opt/homebrew/bin",
|
|
33
|
+
"/opt/homebrew/sbin",
|
|
34
|
+
"/usr/local/bin",
|
|
35
|
+
"/usr/local/sbin",
|
|
36
|
+
"/usr/bin",
|
|
37
|
+
"/bin",
|
|
38
|
+
process.env.PATH ?? "",
|
|
39
|
+
].filter(Boolean).join(IS_WINDOWS ? ";" : ":"),
|
|
40
|
+
};
|
|
41
|
+
export function resolveHermesBin() {
|
|
42
|
+
const explicit = process.env.HERMES_BIN?.trim();
|
|
43
|
+
if (explicit && existsSync(explicit)) {
|
|
44
|
+
return explicit;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const whichCmd = IS_WINDOWS ? "where hermes" : "command -v hermes";
|
|
48
|
+
const resolved = execSync(whichCmd, { stdio: "pipe", env: SUBPROCESS_ENV, timeout: 3000 }).toString().trim();
|
|
49
|
+
const first = resolved.split(/\r?\n/)[0]?.trim();
|
|
50
|
+
if (first) {
|
|
51
|
+
return first;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// fall through
|
|
56
|
+
}
|
|
57
|
+
const local = join(homedir(), ".local", "bin", IS_WINDOWS ? "hermes.cmd" : "hermes");
|
|
58
|
+
if (existsSync(local)) {
|
|
59
|
+
return local;
|
|
60
|
+
}
|
|
61
|
+
return "hermes";
|
|
62
|
+
}
|
|
63
|
+
export function runHermes(args, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
64
|
+
return execFileSync(resolveHermesBin(), args, {
|
|
65
|
+
env: SUBPROCESS_ENV,
|
|
66
|
+
stdio: "pipe",
|
|
67
|
+
timeout: timeoutMs,
|
|
68
|
+
}).toString();
|
|
69
|
+
}
|
|
70
|
+
export function runHermesWithInput(args, input, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
71
|
+
return execFileSync(resolveHermesBin(), args, {
|
|
72
|
+
env: SUBPROCESS_ENV,
|
|
73
|
+
input,
|
|
74
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
75
|
+
timeout: timeoutMs,
|
|
76
|
+
}).toString();
|
|
77
|
+
}
|
|
78
|
+
export function stripHermesSessionResumeNotices(output) {
|
|
79
|
+
return output
|
|
80
|
+
.split(/\r?\n/)
|
|
81
|
+
.filter((line) => !/^\s*↻?\s*Resumed session\b/i.test(stripAnsi(line).trim()))
|
|
82
|
+
.join("\n");
|
|
83
|
+
}
|
|
84
|
+
export function stripHermesSecurityReviewNotices(output) {
|
|
85
|
+
const lines = output.split(/\r?\n/);
|
|
86
|
+
const kept = [];
|
|
87
|
+
let inSecurityReview = false;
|
|
88
|
+
for (const line of lines) {
|
|
89
|
+
const clean = stripAnsi(line).trim();
|
|
90
|
+
if (/DANGEROUS COMMAND:\s*Security scan/i.test(clean)) {
|
|
91
|
+
inSecurityReview = true;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (inSecurityReview) {
|
|
95
|
+
if (/Choice\s*\[[^\]]+\]:/i.test(clean) || /(?:^|\s)[✕x]\s*Denied\b/i.test(clean) || /\bDenied\b/i.test(clean)) {
|
|
96
|
+
inSecurityReview = false;
|
|
97
|
+
}
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
kept.push(line);
|
|
101
|
+
}
|
|
102
|
+
return kept.join("\n").replace(/\n{3,}/g, "\n\n");
|
|
103
|
+
}
|
|
104
|
+
export function sanitizeHermesChatOutput(output) {
|
|
105
|
+
return stripHermesSecurityReviewNotices(stripHermesSessionResumeNotices(stripAnsi(output)));
|
|
106
|
+
}
|
|
107
|
+
export function stripAnsi(text) {
|
|
108
|
+
return text.replace(/\x1B\[[\d;]*[A-Za-z@\[\]\\^_`{|}~-]/g, "");
|
|
109
|
+
}
|
|
110
|
+
export function errorMessageWithOutput(error) {
|
|
111
|
+
const err = error;
|
|
112
|
+
const stdout = err.stdout?.toString().trim() ?? "";
|
|
113
|
+
const stderr = err.stderr?.toString().trim() ?? "";
|
|
114
|
+
return [stdout, stderr, err.message].filter(Boolean).join("\n") || String(error);
|
|
115
|
+
}
|
|
116
|
+
export function sleep(ms) {
|
|
117
|
+
return new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
|
|
118
|
+
}
|
|
119
|
+
export function runHermesPython(script, extraEnv = {}) {
|
|
120
|
+
const venvPython = join(HERMES_HOME_DIR, "hermes-agent", "venv", "bin", "python");
|
|
121
|
+
const python = process.env.HERMES_PYTHON?.trim()
|
|
122
|
+
|| (existsSync(venvPython) ? venvPython : join(homedir(), ".local", "bin", "python3.11"));
|
|
123
|
+
return execFileSync(python, ["-c", script], {
|
|
124
|
+
cwd: join(HERMES_HOME_DIR, "hermes-agent"),
|
|
125
|
+
env: { ...SUBPROCESS_ENV, ...extraEnv },
|
|
126
|
+
stdio: "pipe",
|
|
127
|
+
timeout: DEFAULT_TIMEOUT_MS,
|
|
128
|
+
}).toString();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=hermes-runtime-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-runtime-process.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LocalResult } from "../../commands/local-runtime.js";
|
|
2
|
+
export declare function runHermesSessionsList(): Promise<LocalResult>;
|
|
3
|
+
export declare function runHermesSessionRename(params: unknown): LocalResult;
|
|
4
|
+
export declare function runHermesSessionDelete(params: unknown): Promise<LocalResult>;
|
|
5
|
+
export declare function runHermesSessionExport(params: unknown): Promise<LocalResult>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { forgetHermesSession, getMappedHermesSessionId } from "../hermes-session-store.js";
|
|
2
|
+
import { listHermesSessions } from "./hermes-runtime-usage.js";
|
|
3
|
+
import { runHermesOutput } from "./hermes-runtime-command-utils.js";
|
|
4
|
+
import { stringParam, toRecord } from "./hermes-runtime-values.js";
|
|
5
|
+
import { errorMessageWithOutput } from "./hermes-runtime-process.js";
|
|
6
|
+
export async function runHermesSessionsList() {
|
|
7
|
+
try {
|
|
8
|
+
const sessions = await listHermesSessions();
|
|
9
|
+
return { ok: true, payload: { sessions, items: sessions } };
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
return { ok: false, error: errorMessageWithOutput(error) };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function runHermesSessionRename(params) {
|
|
16
|
+
const record = toRecord(params);
|
|
17
|
+
const sessionId = stringParam(record, "sessionId", "hermesSessionId", "id");
|
|
18
|
+
const title = stringParam(record, "title", "name");
|
|
19
|
+
if (!sessionId || !title) {
|
|
20
|
+
return { ok: false, error: "session_id_and_title_required" };
|
|
21
|
+
}
|
|
22
|
+
return runHermesOutput(["sessions", "rename", sessionId, title]);
|
|
23
|
+
}
|
|
24
|
+
export async function runHermesSessionDelete(params) {
|
|
25
|
+
const record = toRecord(params);
|
|
26
|
+
const sessionKey = stringParam(record, "sessionKey", "key", "session");
|
|
27
|
+
const sessionId = stringParam(record, "sessionId", "hermesSessionId", "id")
|
|
28
|
+
?? await resolveHermesSessionIdFromParams(record);
|
|
29
|
+
if (!sessionId) {
|
|
30
|
+
return { ok: false, error: "session_id_required" };
|
|
31
|
+
}
|
|
32
|
+
const result = runHermesOutput(["sessions", "delete", "--yes", sessionId]);
|
|
33
|
+
if (!result.ok) {
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
await forgetHermesSession(sessionKey ?? sessionId, sessionId);
|
|
37
|
+
return {
|
|
38
|
+
ok: true,
|
|
39
|
+
payload: {
|
|
40
|
+
...(toRecord(result.payload)),
|
|
41
|
+
deleted: true,
|
|
42
|
+
sessionId,
|
|
43
|
+
sessionKey,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export async function runHermesSessionExport(params) {
|
|
48
|
+
const record = toRecord(params);
|
|
49
|
+
const sessionId = stringParam(record, "sessionId", "hermesSessionId", "id")
|
|
50
|
+
?? await resolveHermesSessionIdFromParams(record);
|
|
51
|
+
const output = stringParam(record, "output", "outputPath");
|
|
52
|
+
const args = ["sessions", "export", output ?? "-"];
|
|
53
|
+
if (sessionId)
|
|
54
|
+
args.push("--session-id", sessionId);
|
|
55
|
+
return runHermesOutput(args, 10 * 60_000);
|
|
56
|
+
}
|
|
57
|
+
async function resolveHermesSessionIdFromParams(record) {
|
|
58
|
+
const sessionKey = stringParam(record, "sessionKey", "key", "session");
|
|
59
|
+
if (!sessionKey) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
if (sessionKey.toLowerCase().startsWith("hermes:")) {
|
|
63
|
+
const hermesId = sessionKey.slice("hermes:".length).trim();
|
|
64
|
+
return hermesId || undefined;
|
|
65
|
+
}
|
|
66
|
+
if (/^[0-9]{8}_[0-9]{6}_[A-Za-z0-9_-]+$/.test(sessionKey)) {
|
|
67
|
+
return sessionKey;
|
|
68
|
+
}
|
|
69
|
+
return await getMappedHermesSessionId(sessionKey);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=hermes-runtime-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-runtime-sessions.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LocalResult } from "../../commands/local-runtime.js";
|
|
2
|
+
export declare function runHermesSkillsList(): LocalResult;
|
|
3
|
+
export declare function runHermesSkillsUpdate(params: unknown): LocalResult;
|
|
4
|
+
export declare function runHermesSkillsSearch(params: unknown): LocalResult;
|
|
5
|
+
export declare function runHermesSkillsInspect(params: unknown): LocalResult;
|
|
6
|
+
export declare function runHermesSkillsInstall(params: unknown): LocalResult;
|
|
7
|
+
export declare function runHermesSkillsUninstall(params: unknown): LocalResult;
|
|
8
|
+
export declare function runHermesMcpList(): LocalResult;
|
|
9
|
+
export declare function runHermesMcpTest(params: unknown): LocalResult;
|
|
10
|
+
export declare function runHermesMcpAdd(params: unknown): LocalResult;
|
|
11
|
+
export declare function runHermesMcpRemove(params: unknown): LocalResult;
|
|
12
|
+
export declare function runHermesDashboardStart(params: unknown): LocalResult;
|
|
13
|
+
export declare function parseHermesSkillsList(output: string): Array<Record<string, unknown>>;
|