clawconnect-agent 0.1.5 → 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.
Files changed (126) hide show
  1. package/README.md +83 -7
  2. package/README.zh-CN.md +93 -17
  3. package/dist/commands/install.js +10 -4
  4. package/dist/commands/install.js.map +1 -1
  5. package/dist/commands/local-handlers.js +0 -28
  6. package/dist/commands/local-handlers.js.map +1 -1
  7. package/dist/commands/pair.d.ts +2 -0
  8. package/dist/commands/pair.js +17 -6
  9. package/dist/commands/pair.js.map +1 -1
  10. package/dist/commands/run.js +14 -17
  11. package/dist/commands/run.js.map +1 -1
  12. package/dist/commands/send-file.d.ts +2 -0
  13. package/dist/commands/send-file.js +6 -0
  14. package/dist/commands/send-file.js.map +1 -1
  15. package/dist/commands/status.d.ts +13 -1
  16. package/dist/commands/status.js +58 -15
  17. package/dist/commands/status.js.map +1 -1
  18. package/dist/config/config.d.ts +6 -11
  19. package/dist/config/config.js +19 -48
  20. package/dist/config/config.js.map +1 -1
  21. package/dist/config/env.d.ts +1 -1
  22. package/dist/config/env.js +4 -5
  23. package/dist/config/env.js.map +1 -1
  24. package/dist/config/profile.d.ts +11 -0
  25. package/dist/config/profile.js +80 -0
  26. package/dist/config/profile.js.map +1 -0
  27. package/dist/gateway-profiles.d.ts +8 -0
  28. package/dist/gateway-profiles.js +24 -0
  29. package/dist/gateway-profiles.js.map +1 -0
  30. package/dist/hermes/hermes-relay-manager.d.ts +49 -0
  31. package/dist/hermes/hermes-relay-manager.js +636 -0
  32. package/dist/hermes/hermes-relay-manager.js.map +1 -0
  33. package/dist/hermes/hermes-runtime.d.ts +8 -0
  34. package/dist/hermes/hermes-runtime.js +8 -0
  35. package/dist/hermes/hermes-runtime.js.map +1 -0
  36. package/dist/hermes/hermes-session-store.d.ts +15 -0
  37. package/dist/hermes/hermes-session-store.js +152 -0
  38. package/dist/hermes/hermes-session-store.js.map +1 -0
  39. package/dist/hermes/hermes-voice-input.d.ts +13 -0
  40. package/dist/hermes/hermes-voice-input.js +27 -0
  41. package/dist/hermes/hermes-voice-input.js.map +1 -0
  42. package/dist/hermes/models/hermes-runtime-artifacts.d.ts +3 -0
  43. package/dist/hermes/models/hermes-runtime-artifacts.js +65 -0
  44. package/dist/hermes/models/hermes-runtime-artifacts.js.map +1 -0
  45. package/dist/hermes/models/hermes-runtime-backups.d.ts +5 -0
  46. package/dist/hermes/models/hermes-runtime-backups.js +128 -0
  47. package/dist/hermes/models/hermes-runtime-backups.js.map +1 -0
  48. package/dist/hermes/models/hermes-runtime-chat.d.ts +40 -0
  49. package/dist/hermes/models/hermes-runtime-chat.js +623 -0
  50. package/dist/hermes/models/hermes-runtime-chat.js.map +1 -0
  51. package/dist/hermes/models/hermes-runtime-command-router.d.ts +2 -0
  52. package/dist/hermes/models/hermes-runtime-command-router.js +93 -0
  53. package/dist/hermes/models/hermes-runtime-command-router.js.map +1 -0
  54. package/dist/hermes/models/hermes-runtime-command-utils.d.ts +3 -0
  55. package/dist/hermes/models/hermes-runtime-command-utils.js +19 -0
  56. package/dist/hermes/models/hermes-runtime-command-utils.js.map +1 -0
  57. package/dist/hermes/models/hermes-runtime-cron.d.ts +11 -0
  58. package/dist/hermes/models/hermes-runtime-cron.js +301 -0
  59. package/dist/hermes/models/hermes-runtime-cron.js.map +1 -0
  60. package/dist/hermes/models/hermes-runtime-lifecycle.d.ts +9 -0
  61. package/dist/hermes/models/hermes-runtime-lifecycle.js +111 -0
  62. package/dist/hermes/models/hermes-runtime-lifecycle.js.map +1 -0
  63. package/dist/hermes/models/hermes-runtime-models.d.ts +29 -0
  64. package/dist/hermes/models/hermes-runtime-models.js +125 -0
  65. package/dist/hermes/models/hermes-runtime-models.js.map +1 -0
  66. package/dist/hermes/models/hermes-runtime-process.d.ts +22 -0
  67. package/dist/hermes/models/hermes-runtime-process.js +130 -0
  68. package/dist/hermes/models/hermes-runtime-process.js.map +1 -0
  69. package/dist/hermes/models/hermes-runtime-sessions.d.ts +5 -0
  70. package/dist/hermes/models/hermes-runtime-sessions.js +71 -0
  71. package/dist/hermes/models/hermes-runtime-sessions.js.map +1 -0
  72. package/dist/hermes/models/hermes-runtime-skills.d.ts +13 -0
  73. package/dist/hermes/models/hermes-runtime-skills.js +322 -0
  74. package/dist/hermes/models/hermes-runtime-skills.js.map +1 -0
  75. package/dist/hermes/models/hermes-runtime-types.d.ts +19 -0
  76. package/dist/hermes/models/hermes-runtime-types.js +2 -0
  77. package/dist/hermes/models/hermes-runtime-types.js.map +1 -0
  78. package/dist/hermes/models/hermes-runtime-usage.d.ts +22 -0
  79. package/dist/hermes/models/hermes-runtime-usage.js +211 -0
  80. package/dist/hermes/models/hermes-runtime-usage.js.map +1 -0
  81. package/dist/hermes/models/hermes-runtime-values.d.ts +14 -0
  82. package/dist/hermes/models/hermes-runtime-values.js +105 -0
  83. package/dist/hermes/models/hermes-runtime-values.js.map +1 -0
  84. package/dist/i18n/index.js +4 -0
  85. package/dist/i18n/index.js.map +1 -1
  86. package/dist/index.js +115 -9
  87. package/dist/index.js.map +1 -1
  88. package/dist/platform/service-manager-common.d.ts +5 -2
  89. package/dist/platform/service-manager-common.js +18 -7
  90. package/dist/platform/service-manager-common.js.map +1 -1
  91. package/dist/platform/service-manager.d.ts +16 -5
  92. package/dist/platform/service-manager.js +85 -50
  93. package/dist/platform/service-manager.js.map +1 -1
  94. package/dist/relay/chat-history.js +18 -0
  95. package/dist/relay/chat-history.js.map +1 -1
  96. package/dist/relay/gateway-client.d.ts +2 -1
  97. package/dist/relay/gateway-client.js +8 -4
  98. package/dist/relay/gateway-client.js.map +1 -1
  99. package/dist/relay/mobile-chat-run-bridge.d.ts +93 -0
  100. package/dist/relay/mobile-chat-run-bridge.js +68 -0
  101. package/dist/relay/mobile-chat-run-bridge.js.map +1 -0
  102. package/dist/relay/openclaw-voice-input.d.ts +13 -0
  103. package/dist/relay/openclaw-voice-input.js +18 -0
  104. package/dist/relay/openclaw-voice-input.js.map +1 -0
  105. package/dist/relay/relay-manager.d.ts +1 -4
  106. package/dist/relay/relay-manager.js +39 -170
  107. package/dist/relay/relay-manager.js.map +1 -1
  108. package/dist/relay/session-context.js +11 -1
  109. package/dist/relay/session-context.js.map +1 -1
  110. package/dist/relay/slash-command-catalog.d.ts +1 -1
  111. package/dist/relay/slash-command-catalog.generated.d.ts +0 -5
  112. package/dist/relay/slash-command-catalog.generated.js +0 -6
  113. package/dist/relay/slash-command-catalog.generated.js.map +1 -1
  114. package/dist/relay/voice-input.d.ts +11 -0
  115. package/dist/relay/voice-input.js +118 -0
  116. package/dist/relay/voice-input.js.map +1 -0
  117. package/dist/runtime-adapters.d.ts +19 -0
  118. package/dist/runtime-adapters.js +39 -0
  119. package/dist/runtime-adapters.js.map +1 -0
  120. package/package.json +3 -3
  121. package/dist/commands/voice-reply.d.ts +0 -39
  122. package/dist/commands/voice-reply.js +0 -329
  123. package/dist/commands/voice-reply.js.map +0 -1
  124. package/dist/relay/voice-reply-preference.d.ts +0 -25
  125. package/dist/relay/voice-reply-preference.js +0 -103
  126. package/dist/relay/voice-reply-preference.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ import { runHermesOutput } from "./hermes-runtime-command-utils.js";
2
+ import { runHermesBackupCreate, runHermesBackupDelete, runHermesBackupList, runHermesBackupRestore, } from "./hermes-runtime-backups.js";
3
+ import { runHermesCronCreate, runHermesCronList, runHermesCronRemove, runHermesCronRun, runHermesCronUpdate, } from "./hermes-runtime-cron.js";
4
+ import { runClawConnectProfileRestart, runHermesLifecycle } from "./hermes-runtime-lifecycle.js";
5
+ import { runHermesModelList, runHermesModelSelect } from "./hermes-runtime-models.js";
6
+ import { runHermesLogs } from "./hermes-runtime-command-utils.js";
7
+ import { runHermesDashboardStart, runHermesMcpAdd, runHermesMcpList, runHermesMcpRemove, runHermesMcpTest, runHermesSkillsInspect, runHermesSkillsInstall, runHermesSkillsList, runHermesSkillsSearch, runHermesSkillsUninstall, runHermesSkillsUpdate, } from "./hermes-runtime-skills.js";
8
+ import { runHermesSessionDelete, runHermesSessionExport, runHermesSessionRename, runHermesSessionsList, } from "./hermes-runtime-sessions.js";
9
+ export function handleHermesCommand(method, params, context = {}) {
10
+ switch (method) {
11
+ case "hermes.status":
12
+ return runHermesOutput(["status"]);
13
+ case "hermes.logs":
14
+ return runHermesLogs(params);
15
+ case "hermes.sessions.list":
16
+ return runHermesSessionsList();
17
+ case "hermes.sessions.rename":
18
+ return runHermesSessionRename(params);
19
+ case "hermes.sessions.delete":
20
+ return runHermesSessionDelete(params);
21
+ case "hermes.sessions.export":
22
+ return runHermesSessionExport(params);
23
+ case "cron.list":
24
+ case "hermes.cron.list":
25
+ return runHermesCronList(params);
26
+ case "cron.add":
27
+ case "hermes.cron.add":
28
+ return runHermesCronCreate(params);
29
+ case "cron.update":
30
+ case "hermes.cron.update":
31
+ return runHermesCronUpdate(params);
32
+ case "cron.remove":
33
+ case "hermes.cron.remove":
34
+ return runHermesCronRemove(params);
35
+ case "cron.status":
36
+ case "hermes.cron.status":
37
+ return runHermesOutput(["cron", "status"]);
38
+ case "hermes.cron.run":
39
+ return runHermesCronRun(params);
40
+ case "hermes.skills.list":
41
+ case "skills.status":
42
+ return runHermesSkillsList();
43
+ case "hermes.skills.update":
44
+ return runHermesSkillsUpdate(params);
45
+ case "hermes.skills.search":
46
+ return runHermesSkillsSearch(params);
47
+ case "hermes.skills.inspect":
48
+ return runHermesSkillsInspect(params);
49
+ case "hermes.skills.install":
50
+ return runHermesSkillsInstall(params);
51
+ case "hermes.skills.uninstall":
52
+ return runHermesSkillsUninstall(params);
53
+ case "hermes.model.list":
54
+ return runHermesModelList();
55
+ case "hermes.model.select":
56
+ case "hermes.model.setDefault":
57
+ return runHermesModelSelect(params);
58
+ case "hermes.mcp.list":
59
+ return runHermesMcpList();
60
+ case "hermes.mcp.test":
61
+ return runHermesMcpTest(params);
62
+ case "hermes.mcp.add":
63
+ return runHermesMcpAdd(params);
64
+ case "hermes.mcp.remove":
65
+ return runHermesMcpRemove(params);
66
+ case "hermes.dashboard.status":
67
+ return runHermesOutput(["dashboard", "--status"]);
68
+ case "hermes.dashboard.start":
69
+ return runHermesDashboardStart(params);
70
+ case "hermes.dashboard.stop":
71
+ return runHermesOutput(["dashboard", "--stop"]);
72
+ case "hermes.gateway.start":
73
+ return runHermesLifecycle("start", context);
74
+ case "hermes.gateway.stop":
75
+ return runHermesLifecycle("stop", context);
76
+ case "hermes.gateway.restart":
77
+ case "hermes.agent.restart":
78
+ return runClawConnectProfileRestart(context);
79
+ case "hermes.backup.create":
80
+ return runHermesBackupCreate(params);
81
+ case "hermes.backup.list":
82
+ return runHermesBackupList();
83
+ case "hermes.backup.delete":
84
+ return runHermesBackupDelete(params);
85
+ case "hermes.backup.restore":
86
+ return runHermesBackupRestore(params);
87
+ case "hermes.update":
88
+ return runHermesOutput(["update"], 10 * 60_000);
89
+ default:
90
+ return null;
91
+ }
92
+ }
93
+ //# sourceMappingURL=hermes-runtime-command-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-runtime-command-router.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-command-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { LocalResult } from "../../commands/local-runtime.js";
2
+ export declare function runHermesOutput(args: string[], timeoutMs?: number): LocalResult;
3
+ export declare function runHermesLogs(params: unknown): LocalResult;
@@ -0,0 +1,19 @@
1
+ import { DEFAULT_TIMEOUT_MS, errorMessageWithOutput, runHermes } from "./hermes-runtime-process.js";
2
+ export function runHermesOutput(args, timeoutMs = DEFAULT_TIMEOUT_MS) {
3
+ try {
4
+ const output = runHermes(args, timeoutMs);
5
+ return { ok: true, payload: { output } };
6
+ }
7
+ catch (error) {
8
+ return { ok: false, error: errorMessageWithOutput(error) };
9
+ }
10
+ }
11
+ export function runHermesLogs(params) {
12
+ const record = params && typeof params === "object" && !Array.isArray(params)
13
+ ? params
14
+ : {};
15
+ const logName = typeof record.logName === "string" && record.logName.trim().length > 0 ? record.logName.trim() : "gateway";
16
+ const limit = typeof record.limit === "number" && Number.isFinite(record.limit) ? Math.max(1, Math.min(2000, Math.floor(record.limit))) : 100;
17
+ return runHermesOutput(["logs", logName, "-n", String(limit)]);
18
+ }
19
+ //# sourceMappingURL=hermes-runtime-command-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-runtime-command-utils.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-command-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAEpG,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,SAAS,GAAG,kBAAkB;IAC5E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3E,CAAC,CAAE,MAAkC;QACrC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3H,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9I,OAAO,eAAe,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { LocalResult } from "../../commands/local-runtime.js";
2
+ export declare function runHermesCronList(params: unknown): Promise<LocalResult>;
3
+ export declare function runHermesCronCreate(params: unknown): LocalResult;
4
+ export declare function runHermesCronUpdate(params: unknown): LocalResult;
5
+ export declare function runHermesCronRemove(params: unknown): LocalResult;
6
+ export declare function runHermesCronRun(params: unknown): LocalResult;
7
+ export declare function isDuplicateHermesCronJob(job: Record<string, unknown>, candidate: {
8
+ name?: string;
9
+ prompt: string;
10
+ schedule: string;
11
+ }): boolean;
@@ -0,0 +1,301 @@
1
+ import { execFileSync } from "child_process";
2
+ import { existsSync, readFileSync } from "fs";
3
+ import { readFile } from "fs/promises";
4
+ import { DEFAULT_TIMEOUT_MS, HERMES_CRON_JOBS_FILE, errorMessageWithOutput, runHermes, } from "./hermes-runtime-process.js";
5
+ import { numberParam, stringParam, toRecord } from "./hermes-runtime-values.js";
6
+ export async function runHermesCronList(params) {
7
+ try {
8
+ const includeDisabled = toRecord(params).includeDisabled !== false;
9
+ const jobs = await readHermesCronJobs(includeDisabled);
10
+ return { ok: true, payload: { jobs, items: jobs, hasMore: false, nextOffset: null } };
11
+ }
12
+ catch (error) {
13
+ return { ok: false, error: errorMessageWithOutput(error) };
14
+ }
15
+ }
16
+ export function runHermesCronCreate(params) {
17
+ const record = toRecord(params);
18
+ const schedule = hermesScheduleFromParams(record);
19
+ const prompt = promptFromCronParams(record);
20
+ if (!schedule || !prompt) {
21
+ return { ok: false, error: "schedule_and_prompt_required" };
22
+ }
23
+ const name = stringParam(record, "name", "title");
24
+ const duplicate = findDuplicateHermesCronJobPayload({ name, prompt, schedule });
25
+ if (duplicate) {
26
+ return { ok: true, payload: { ...duplicate, deduplicated: true } };
27
+ }
28
+ const args = ["cron", "create", schedule, prompt];
29
+ if (name)
30
+ args.push("--name", name);
31
+ const output = runHermes(args, DEFAULT_TIMEOUT_MS);
32
+ const createdId = output.match(/Created job:\s*([A-Za-z0-9_-]+)/)?.[1];
33
+ return { ok: true, payload: findHermesCronJobPayload(createdId) ?? { output } };
34
+ }
35
+ export function runHermesCronUpdate(params) {
36
+ const record = toRecord(params);
37
+ const id = stringParam(record, "id", "jobId");
38
+ const patch = toRecord(record.patch ?? record);
39
+ if (!id) {
40
+ return { ok: false, error: "job_id_required" };
41
+ }
42
+ const patchKeys = Object.keys(patch).filter((key) => key !== "id" && key !== "jobId");
43
+ if (patchKeys.length === 1 && typeof patch.enabled === "boolean") {
44
+ runHermes(["cron", patch.enabled ? "resume" : "pause", id]);
45
+ return { ok: true, payload: findHermesCronJobPayload(id) ?? { id, enabled: patch.enabled } };
46
+ }
47
+ const args = ["cron", "edit", id];
48
+ const schedule = hermesScheduleFromParams(patch);
49
+ const prompt = promptFromCronParams(patch);
50
+ const name = stringParam(patch, "name", "title");
51
+ if (schedule)
52
+ args.push("--schedule", schedule);
53
+ if (prompt)
54
+ args.push("--prompt", prompt);
55
+ if (name)
56
+ args.push("--name", name);
57
+ if (typeof patch.enabled === "boolean") {
58
+ runHermes(["cron", patch.enabled ? "resume" : "pause", id]);
59
+ }
60
+ if (args.length > 3) {
61
+ runHermes(args);
62
+ }
63
+ return { ok: true, payload: findHermesCronJobPayload(id) ?? { id } };
64
+ }
65
+ export function runHermesCronRemove(params) {
66
+ const id = stringParam(toRecord(params), "id", "jobId");
67
+ if (!id) {
68
+ return { ok: false, error: "job_id_required" };
69
+ }
70
+ const output = runHermes(["cron", "remove", id]);
71
+ return { ok: true, payload: { removed: !/not found/i.test(output), output } };
72
+ }
73
+ export function runHermesCronRun(params) {
74
+ const id = stringParam(toRecord(params), "id", "jobId");
75
+ if (!id) {
76
+ return { ok: false, error: "job_id_required" };
77
+ }
78
+ const output = runHermes(["cron", "run", id]);
79
+ return { ok: true, payload: findHermesCronJobPayload(id) ?? { id, output } };
80
+ }
81
+ async function readHermesCronJobs(includeDisabled = true) {
82
+ try {
83
+ const raw = await readFile(HERMES_CRON_JOBS_FILE, "utf8");
84
+ return parseHermesCronJobs(raw, includeDisabled);
85
+ }
86
+ catch {
87
+ return [];
88
+ }
89
+ }
90
+ function readHermesCronJobsSync(includeDisabled = true) {
91
+ try {
92
+ return existsSync(HERMES_CRON_JOBS_FILE)
93
+ ? parseHermesCronJobs(readFileSync(HERMES_CRON_JOBS_FILE, "utf8"), includeDisabled)
94
+ : [];
95
+ }
96
+ catch {
97
+ return [];
98
+ }
99
+ }
100
+ function parseHermesCronJobs(raw, includeDisabled = true) {
101
+ const parsed = JSON.parse(raw);
102
+ const jobs = Array.isArray(parsed)
103
+ ? parsed
104
+ : parsed && typeof parsed === "object" && Array.isArray(parsed.jobs)
105
+ ? parsed.jobs
106
+ : [];
107
+ return jobs
108
+ .filter((job) => Boolean(job) && typeof job === "object" && !Array.isArray(job))
109
+ .filter((job) => includeDisabled || job.enabled !== false)
110
+ .map(normalizeHermesCronJob);
111
+ }
112
+ function findHermesCronJobPayload(id) {
113
+ if (!id)
114
+ return undefined;
115
+ try {
116
+ const raw = execFileSync(process.execPath, ["-e", `
117
+ const fs = require("fs");
118
+ const file = ${JSON.stringify(HERMES_CRON_JOBS_FILE)};
119
+ const parsed = fs.existsSync(file) ? JSON.parse(fs.readFileSync(file, "utf8")) : { jobs: [] };
120
+ const jobs = Array.isArray(parsed) ? parsed : (Array.isArray(parsed.jobs) ? parsed.jobs : []);
121
+ process.stdout.write(JSON.stringify(jobs.find((job) => job && job.id === ${JSON.stringify(id)}) || null));
122
+ `], { stdio: "pipe", timeout: 3000 }).toString();
123
+ const parsed = JSON.parse(raw);
124
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? normalizeHermesCronJob(parsed) : undefined;
125
+ }
126
+ catch {
127
+ return undefined;
128
+ }
129
+ }
130
+ function findDuplicateHermesCronJobPayload(candidate) {
131
+ return readHermesCronJobsSync(true).find((job) => isDuplicateHermesCronJob(job, candidate));
132
+ }
133
+ export function isDuplicateHermesCronJob(job, candidate) {
134
+ const raw = toRecord(job.raw);
135
+ const existingName = stringParam(raw, "name") ?? stringParam(job, "name");
136
+ if (candidate.name && existingName && normalizeCronText(candidate.name) !== normalizeCronText(existingName)) {
137
+ return false;
138
+ }
139
+ const existingPrompt = stringParam(raw, "prompt") ?? stringParam(toRecord(job.payload), "message", "text");
140
+ if (!existingPrompt || !areDuplicateCronPrompts(existingPrompt, candidate.prompt)) {
141
+ return false;
142
+ }
143
+ const existingSchedule = stringParam(raw, "schedule_display")
144
+ ?? stringParam(toRecord(raw.schedule), "display", "expr")
145
+ ?? scheduleStringFromNormalizedJob(job);
146
+ return areDuplicateCronSchedules(existingSchedule, candidate.schedule);
147
+ }
148
+ function normalizeHermesCronJob(job) {
149
+ const schedule = toRecord(job.schedule);
150
+ const normalizedSchedule = {};
151
+ if (schedule.kind === "once") {
152
+ normalizedSchedule.kind = "at";
153
+ const atMs = dateMs(schedule.run_at);
154
+ if (atMs !== undefined)
155
+ normalizedSchedule.atMs = atMs;
156
+ }
157
+ else if (schedule.kind === "interval") {
158
+ normalizedSchedule.kind = "every";
159
+ const minutes = numberParam(schedule, "minutes") ?? 0;
160
+ normalizedSchedule.everyMs = Math.max(1, minutes) * 60_000;
161
+ const anchorMs = dateMs(job.created_at);
162
+ if (anchorMs !== undefined)
163
+ normalizedSchedule.anchorMs = anchorMs;
164
+ }
165
+ else if (schedule.kind === "cron") {
166
+ normalizedSchedule.kind = "cron";
167
+ normalizedSchedule.expr = schedule.expr;
168
+ }
169
+ return {
170
+ id: job.id,
171
+ name: job.name,
172
+ enabled: job.enabled !== false,
173
+ state: {
174
+ nextRunAtMs: dateMs(job.next_run_at),
175
+ lastRunStatus: job.last_status,
176
+ lastError: job.last_error,
177
+ lastDeliveryError: job.last_delivery_error,
178
+ },
179
+ createdAtMs: dateMs(job.created_at),
180
+ updatedAtMs: dateMs(job.updated_at) ?? dateMs(job.created_at),
181
+ schedule: normalizedSchedule,
182
+ payload: { message: typeof job.prompt === "string" ? job.prompt : "" },
183
+ raw: job,
184
+ };
185
+ }
186
+ function scheduleStringFromNormalizedJob(job) {
187
+ const schedule = toRecord(job.schedule);
188
+ const kind = stringParam(schedule, "kind");
189
+ if (kind === "every") {
190
+ const everyMs = numberParam(schedule, "everyMs");
191
+ return everyMs ? `every ${Math.max(1, Math.round(everyMs / 60_000))}m` : undefined;
192
+ }
193
+ if (kind === "cron") {
194
+ return stringParam(schedule, "expr", "value");
195
+ }
196
+ return stringParam(schedule, "at");
197
+ }
198
+ function dateMs(value) {
199
+ if (typeof value !== "string" || !value.trim())
200
+ return undefined;
201
+ const parsed = Date.parse(value);
202
+ return Number.isFinite(parsed) ? parsed : undefined;
203
+ }
204
+ function hermesScheduleFromParams(record) {
205
+ const explicit = stringParam(record, "schedule");
206
+ if (explicit)
207
+ return explicit;
208
+ const schedule = toRecord(record.schedule);
209
+ const kind = stringParam(schedule, "kind");
210
+ if (kind === "at") {
211
+ const at = stringParam(schedule, "at") ?? isoFromMs(schedule.atMs);
212
+ return at;
213
+ }
214
+ if (kind === "every") {
215
+ const everyMs = numberParam(schedule, "everyMs");
216
+ return everyMs ? `every ${Math.max(1, Math.round(everyMs / 60_000))}m` : undefined;
217
+ }
218
+ if (kind === "cron") {
219
+ return stringParam(schedule, "expr", "value");
220
+ }
221
+ return undefined;
222
+ }
223
+ function areDuplicateCronSchedules(left, right) {
224
+ const leftFingerprint = cronScheduleFingerprint(left);
225
+ const rightFingerprint = cronScheduleFingerprint(right);
226
+ if (!leftFingerprint || !rightFingerprint) {
227
+ return normalizeCronText(left ?? "") === normalizeCronText(right);
228
+ }
229
+ if (leftFingerprint === rightFingerprint) {
230
+ return true;
231
+ }
232
+ return leftFingerprint === "daily" && rightFingerprint === "daily";
233
+ }
234
+ function cronScheduleFingerprint(value) {
235
+ const normalized = value?.trim().toLowerCase().replace(/\s+/g, " ");
236
+ if (!normalized)
237
+ return undefined;
238
+ const everyMatch = normalized.match(/^(?:every\s*)?(\d+)\s*m(?:in(?:ute)?s?)?$/);
239
+ if (everyMatch) {
240
+ const minutes = Number.parseInt(everyMatch[1] ?? "", 10);
241
+ return minutes === 1440 ? "daily" : `every:${minutes}`;
242
+ }
243
+ const hourlyCronMatch = normalized.match(/^(\d{1,2})\s+(\d{1,2})\s+\*\s+\*\s+\*$/);
244
+ if (hourlyCronMatch) {
245
+ return "daily";
246
+ }
247
+ return normalized;
248
+ }
249
+ function areDuplicateCronPrompts(left, right) {
250
+ const normalizedLeft = normalizeCronPrompt(left);
251
+ const normalizedRight = normalizeCronPrompt(right);
252
+ if (!normalizedLeft || !normalizedRight)
253
+ return false;
254
+ if (normalizedLeft === normalizedRight)
255
+ return true;
256
+ if (normalizedLeft.includes(normalizedRight) || normalizedRight.includes(normalizedLeft))
257
+ return true;
258
+ return ngramOverlapRatio(normalizedLeft, normalizedRight, 3) >= 0.55;
259
+ }
260
+ function normalizeCronPrompt(value) {
261
+ return normalizeCronText(value)
262
+ .replace(/^你是每日/, "每日")
263
+ .replace(/^每天执行一次/, "")
264
+ .replace(/^每天/, "");
265
+ }
266
+ function normalizeCronText(value) {
267
+ return value
268
+ .toLowerCase()
269
+ .replace(/[\s"'“”‘’.,,。::;;!!??()()[\]【】{}<>《》|、\\/-]+/g, "");
270
+ }
271
+ function ngramOverlapRatio(left, right, size) {
272
+ const leftGrams = ngrams(left, size);
273
+ const rightGrams = ngrams(right, size);
274
+ const smallerSize = Math.min(leftGrams.size, rightGrams.size);
275
+ if (smallerSize === 0)
276
+ return 0;
277
+ let overlap = 0;
278
+ for (const gram of leftGrams) {
279
+ if (rightGrams.has(gram))
280
+ overlap += 1;
281
+ }
282
+ return overlap / smallerSize;
283
+ }
284
+ function ngrams(value, size) {
285
+ if (value.length <= size)
286
+ return new Set([value]);
287
+ const grams = new Set();
288
+ for (let index = 0; index <= value.length - size; index += 1) {
289
+ grams.add(value.slice(index, index + size));
290
+ }
291
+ return grams;
292
+ }
293
+ function promptFromCronParams(record) {
294
+ const payload = toRecord(record.payload);
295
+ return stringParam(record, "prompt", "message") ?? stringParam(payload, "message", "text");
296
+ }
297
+ function isoFromMs(value) {
298
+ const parsed = typeof value === "number" ? value : typeof value === "string" ? Number(value) : NaN;
299
+ return Number.isFinite(parsed) ? new Date(parsed).toISOString() : undefined;
300
+ }
301
+ //# sourceMappingURL=hermes-runtime-cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-runtime-cron.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { LocalCommandContext, LocalResult } from "../../commands/local-runtime.js";
2
+ export declare function buildClawConnectProfileRestartArgs(profile: string | undefined | null, entrypoint?: string): string[];
3
+ export declare function runClawConnectProfileRestart(context: LocalCommandContext, options?: {
4
+ profile?: string | null;
5
+ entrypoint?: string;
6
+ nodePath?: string;
7
+ delaySeconds?: number;
8
+ }): LocalResult;
9
+ export declare function runHermesLifecycle(action: "start" | "stop" | "restart", context: LocalCommandContext): Promise<LocalResult>;
@@ -0,0 +1,111 @@
1
+ import { spawn } from "child_process";
2
+ import { getActiveProfile, profileDisplayName } from "../../config/profile.js";
3
+ import { SUBPROCESS_ENV, resolveHermesBin, stripAnsi } from "./hermes-runtime-process.js";
4
+ export function buildClawConnectProfileRestartArgs(profile, entrypoint = process.argv[1]) {
5
+ const args = [entrypoint, "restart"].filter((arg) => Boolean(arg));
6
+ if (profile) {
7
+ args.push("--profile", profile);
8
+ }
9
+ return args;
10
+ }
11
+ export function runClawConnectProfileRestart(context, options = {}) {
12
+ const profile = options.profile ?? getActiveProfile();
13
+ const profileName = profileDisplayName(profile);
14
+ const entrypoint = options.entrypoint ?? process.argv[1];
15
+ if (!entrypoint) {
16
+ return { ok: false, error: "Unable to resolve clawconnect entrypoint for service restart." };
17
+ }
18
+ const nodePath = options.nodePath ?? process.execPath;
19
+ const restartArgs = buildClawConnectProfileRestartArgs(profile, entrypoint);
20
+ const delaySeconds = options.delaySeconds ?? 0.5;
21
+ const child = process.platform === "win32"
22
+ ? spawn(nodePath, restartArgs, {
23
+ env: SUBPROCESS_ENV,
24
+ stdio: "ignore",
25
+ detached: true,
26
+ windowsHide: true,
27
+ })
28
+ : spawn("/bin/sh", [
29
+ "-c",
30
+ "sleep \"$1\"; shift; exec \"$@\"",
31
+ "clawconnect-profile-restart",
32
+ String(delaySeconds),
33
+ nodePath,
34
+ ...restartArgs,
35
+ ], {
36
+ env: SUBPROCESS_ENV,
37
+ stdio: "ignore",
38
+ detached: true,
39
+ windowsHide: true,
40
+ });
41
+ child.once("error", (error) => {
42
+ console.warn(`[hermes] failed to schedule ClawConnect ${profileName} restart:`, String(error));
43
+ });
44
+ child.unref();
45
+ const text = `ClawConnect ${profileName} profile restart requested.`;
46
+ context.publishEvent?.({
47
+ type: "event",
48
+ event: "maintenance_log",
49
+ payload: {
50
+ gatewayId: context.gatewayId,
51
+ requestId: context.requestId,
52
+ runId: context.requestId,
53
+ stream: "status",
54
+ seq: 1,
55
+ ts: Date.now(),
56
+ text,
57
+ },
58
+ });
59
+ return { ok: true, payload: { output: text } };
60
+ }
61
+ export async function runHermesLifecycle(action, context) {
62
+ const args = ["gateway", action];
63
+ const publishEvent = context.publishEvent;
64
+ const requestId = context.requestId;
65
+ const gatewayId = context.gatewayId;
66
+ const child = spawn(resolveHermesBin(), args, {
67
+ env: SUBPROCESS_ENV,
68
+ stdio: ["ignore", "pipe", "pipe"],
69
+ windowsHide: true,
70
+ });
71
+ let output = "";
72
+ let seq = 0;
73
+ const emit = (stream, text) => {
74
+ const clean = stripAnsi(text).trimEnd();
75
+ if (!clean) {
76
+ return;
77
+ }
78
+ output += `${clean}\n`;
79
+ publishEvent?.({
80
+ type: "event",
81
+ event: "maintenance_log",
82
+ payload: {
83
+ gatewayId,
84
+ requestId,
85
+ runId: requestId,
86
+ stream,
87
+ seq: seq += 1,
88
+ ts: Date.now(),
89
+ text: clean,
90
+ },
91
+ });
92
+ };
93
+ child.stdout?.on("data", (chunk) => emit("stdout", chunk.toString()));
94
+ child.stderr?.on("data", (chunk) => emit("stderr", chunk.toString()));
95
+ emit("status", `Running: hermes gateway ${action}`);
96
+ return await new Promise((resolveResult) => {
97
+ child.once("error", (error) => resolveResult({ ok: false, error: String(error) }));
98
+ child.once("close", (code, signal) => {
99
+ const summary = typeof code === "number"
100
+ ? `hermes gateway ${action} exited with code ${code}`
101
+ : `hermes gateway ${action} exited${signal ? ` with signal ${signal}` : ""}`;
102
+ emit("status", summary);
103
+ if (code && code !== 0) {
104
+ resolveResult({ ok: false, error: output.trim() || summary });
105
+ return;
106
+ }
107
+ resolveResult({ ok: true, payload: { output: output.trim() || summary } });
108
+ });
109
+ });
110
+ }
111
+ //# sourceMappingURL=hermes-runtime-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-runtime-lifecycle.js","sourceRoot":"","sources":["../../../src/hermes/models/hermes-runtime-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { LocalResult } from "../../commands/local-runtime.js";
2
+ type HermesModelListItem = {
3
+ providerId: string;
4
+ provider: string;
5
+ modelId: string;
6
+ alias: string;
7
+ name: string;
8
+ contextWindow: string;
9
+ tags: string[];
10
+ isSelected: boolean;
11
+ isDefault: boolean;
12
+ };
13
+ export declare function runHermesModelList(): Promise<LocalResult>;
14
+ export declare function runHermesModelSelect(params: unknown): Promise<LocalResult>;
15
+ export declare function hermesModelListResultFromPayload(payload: unknown, current?: {
16
+ currentModel?: string;
17
+ provider?: string;
18
+ }, config?: {
19
+ model?: string;
20
+ provider?: string;
21
+ }): LocalResult;
22
+ export declare function modelItemsFromHermesModelOptionsPayload(payload: unknown, current?: {
23
+ currentModel?: string;
24
+ provider?: string;
25
+ }, config?: {
26
+ model?: string;
27
+ provider?: string;
28
+ }): HermesModelListItem[];
29
+ export {};