@saleso.innovations/bridge 0.1.37 → 0.1.39
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/hermesCommands.d.ts +1 -1
- package/dist/hermesCommands.d.ts.map +1 -1
- package/dist/hermesCommands.js +7 -0
- package/dist/renameHermesSession.d.ts +7 -0
- package/dist/renameHermesSession.d.ts.map +1 -0
- package/dist/renameHermesSession.js +39 -0
- package/dist/renameHermesSession.test.d.ts +2 -0
- package/dist/renameHermesSession.test.d.ts.map +1 -0
- package/dist/renameHermesSession.test.js +15 -0
- package/package.json +2 -2
package/dist/hermesCommands.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ShellDeltaEmitter } from "./shellSession.js";
|
|
2
|
-
export declare const HERMES_COMMAND_NAMES: readonly ["runtime.health", "runtime.detailedHealth", "runtime.version", "runtime.capabilities", "models.list", "model.set", "responses.create", "runs.create", "runs.status", "runs.stop", "jobs.list", "jobs.get", "jobs.create", "jobs.update", "jobs.pause", "jobs.resume", "jobs.runNow", "jobs.delete", "profiles.list", "profiles.create", "gateway.start", "gateway.stop", "gateway.restart", "hermes.update", "bridge.version", "bridge.update", "sessions.messages.list", "sessions.messages.countSent", "sessions.titles.resolve", "sessions.usage.get", "sessions.list", "skills.list", "tools.list", "tools.set", "mcp.list", "mcp.add", "mcp.remove", "files.list", "files.read", "files.write", "files.delete", "memories.list", "shell.exec", "shell.session.reset"];
|
|
2
|
+
export declare const HERMES_COMMAND_NAMES: readonly ["runtime.health", "runtime.detailedHealth", "runtime.version", "runtime.capabilities", "models.list", "model.set", "responses.create", "runs.create", "runs.status", "runs.stop", "jobs.list", "jobs.get", "jobs.create", "jobs.update", "jobs.pause", "jobs.resume", "jobs.runNow", "jobs.delete", "profiles.list", "profiles.create", "gateway.start", "gateway.stop", "gateway.restart", "hermes.update", "bridge.version", "bridge.update", "sessions.messages.list", "sessions.messages.countSent", "sessions.titles.resolve", "sessions.rename", "sessions.usage.get", "sessions.list", "skills.list", "tools.list", "tools.set", "mcp.list", "mcp.add", "mcp.remove", "files.list", "files.read", "files.write", "files.delete", "memories.list", "shell.exec", "shell.session.reset"];
|
|
3
3
|
export type HermesCommandName = (typeof HERMES_COMMAND_NAMES)[number];
|
|
4
4
|
export declare function isHermesCommandName(value: string): value is HermesCommandName;
|
|
5
5
|
export type HermesCommandErrorCode = "command_unsupported" | "hermes_unreachable" | "hermes_request_failed" | "invalid_command_args" | "unsupported_by_http";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermesCommands.d.ts","sourceRoot":"","sources":["../src/hermesCommands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hermesCommands.d.ts","sourceRoot":"","sources":["../src/hermesCommands.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAuC,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMhG,eAAO,MAAM,oBAAoB,ywBA8CvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB,CAE7E;AAED,MAAM,MAAM,sBAAsB,GAC9B,qBAAqB,GACrB,oBAAoB,GACpB,uBAAuB,GACvB,sBAAsB,GACtB,qBAAqB,CAAC;AAE1B,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;gBAE1B,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM;CAI1D;AAkID,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAAO,GAC9F,OAAO,CAAC,OAAO,CAAC,CAuQlB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAetG"}
|
package/dist/hermesCommands.js
CHANGED
|
@@ -7,6 +7,7 @@ import { listHermesTools, setHermesToolEnabled } from "./toolsList.js";
|
|
|
7
7
|
import { addHermesMcpServer, listHermesMcpServers, removeHermesMcpServer } from "./mcpList.js";
|
|
8
8
|
import { runHermesUpdate } from "./hermesUpdate.js";
|
|
9
9
|
import { executeFilesList, executeFilesRead, executeFilesWrite, executeFilesDelete, executeMemoriesList, } from "./hermesFileCommands.js";
|
|
10
|
+
import { renameHermesSession } from "./renameHermesSession.js";
|
|
10
11
|
import { executeShellExec, resetShellSession } from "./shellSession.js";
|
|
11
12
|
import { fetchHermesRuntimeVersion } from "./runtimeVersion.js";
|
|
12
13
|
import { fetchBridgeRuntimeVersion, fetchInstalledBridgeVersion } from "./bridgeVersion.js";
|
|
@@ -42,6 +43,7 @@ export const HERMES_COMMAND_NAMES = [
|
|
|
42
43
|
"sessions.messages.list",
|
|
43
44
|
"sessions.messages.countSent",
|
|
44
45
|
"sessions.titles.resolve",
|
|
46
|
+
"sessions.rename",
|
|
45
47
|
"sessions.usage.get",
|
|
46
48
|
"sessions.list",
|
|
47
49
|
"skills.list",
|
|
@@ -355,6 +357,11 @@ export async function executeHermesCommand(command, args, options = {}) {
|
|
|
355
357
|
const sessionIds = optionalStringArray(args, "sessionIds") ?? [];
|
|
356
358
|
return { titles: resolveSessionTitles(sessionIds) };
|
|
357
359
|
}
|
|
360
|
+
case "sessions.rename": {
|
|
361
|
+
const sessionId = requireString(args, "sessionId");
|
|
362
|
+
const title = requireString(args, "title");
|
|
363
|
+
return await renameHermesSession(sessionId, title);
|
|
364
|
+
}
|
|
358
365
|
case "sessions.usage.get": {
|
|
359
366
|
const sessionId = requireString(args, "sessionId");
|
|
360
367
|
return getSessionUsage(sessionId);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renameHermesSession.d.ts","sourceRoot":"","sources":["../src/renameHermesSession.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAgBF,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,yBAAyB,CAAC,CAmBpC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
const RENAME_TIMEOUT_MS = 30_000;
|
|
5
|
+
function execFailureMessage(error) {
|
|
6
|
+
if (error && typeof error === "object") {
|
|
7
|
+
const record = error;
|
|
8
|
+
const stderr = record.stderr?.trim();
|
|
9
|
+
if (stderr)
|
|
10
|
+
return stderr;
|
|
11
|
+
const stdout = record.stdout?.trim();
|
|
12
|
+
if (stdout)
|
|
13
|
+
return stdout;
|
|
14
|
+
if (typeof record.message === "string" && record.message.trim()) {
|
|
15
|
+
return record.message.trim();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return "Could not rename Hermes session.";
|
|
19
|
+
}
|
|
20
|
+
export async function renameHermesSession(sessionId, title) {
|
|
21
|
+
const trimmedId = sessionId.trim();
|
|
22
|
+
const trimmedTitle = title.trim().slice(0, 120);
|
|
23
|
+
if (!trimmedId) {
|
|
24
|
+
throw new Error('Missing or invalid "sessionId"');
|
|
25
|
+
}
|
|
26
|
+
if (!trimmedTitle) {
|
|
27
|
+
throw new Error('Missing or invalid "title"');
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
await execFileAsync("hermes", ["sessions", "rename", trimmedId, trimmedTitle], {
|
|
31
|
+
timeout: RENAME_TIMEOUT_MS,
|
|
32
|
+
env: process.env,
|
|
33
|
+
});
|
|
34
|
+
return { ok: true, sessionId: trimmedId, title: trimmedTitle };
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw new Error(execFailureMessage(error));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renameHermesSession.test.d.ts","sourceRoot":"","sources":["../src/renameHermesSession.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import { renameHermesSession } from "./renameHermesSession.js";
|
|
4
|
+
test("renameHermesSession rejects empty session id", async () => {
|
|
5
|
+
await assert.rejects(() => renameHermesSession(" ", "My session"), (error) => {
|
|
6
|
+
assert.match(String(error), /sessionId/i);
|
|
7
|
+
return true;
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
test("renameHermesSession rejects empty title", async () => {
|
|
11
|
+
await assert.rejects(() => renameHermesSession("20250305_091523_a1b2c3", " "), (error) => {
|
|
12
|
+
assert.match(String(error), /title/i);
|
|
13
|
+
return true;
|
|
14
|
+
});
|
|
15
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saleso.innovations/bridge",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.39",
|
|
4
4
|
"description": "Connect your Hermes agent to the Cleos iOS app via pairing code.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"lint": "eslint . --max-warnings 0",
|
|
37
37
|
"check-types": "tsc --noEmit",
|
|
38
38
|
"prepublishOnly": "npm run build",
|
|
39
|
-
"test": "node --import tsx --test src/hermesFiles.test.ts src/hermesSessionDb.test.ts src/shellSession.test.ts src/bridgeVersion.test.ts"
|
|
39
|
+
"test": "node --import tsx --test src/hermesFiles.test.ts src/hermesSessionDb.test.ts src/renameHermesSession.test.ts src/shellSession.test.ts src/bridgeVersion.test.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"better-sqlite3": "^11.10.0",
|