@perkos/perkos-a2a 0.12.61 → 0.12.63

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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=maintenance-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance-runner.d.ts","sourceRoot":"","sources":["../src/maintenance-runner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env node
2
+ import { execFile } from "node:child_process";
3
+ import { access, chmod, mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
+ import { promisify } from "node:util";
6
+ const execFileAsync = promisify(execFile);
7
+ function jobPath() {
8
+ const index = process.argv.indexOf("--job");
9
+ const path = index >= 0 ? process.argv[index + 1] : undefined;
10
+ if (!path)
11
+ throw new Error("job_missing");
12
+ return path;
13
+ }
14
+ async function atomicPrivateJson(path, value) {
15
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
16
+ const temporary = `${path}.${process.pid}.tmp`;
17
+ await writeFile(temporary, `${JSON.stringify(value)}\n`, { mode: 0o600 });
18
+ await chmod(temporary, 0o600);
19
+ await rename(temporary, path);
20
+ }
21
+ async function report(job, body) {
22
+ const response = await fetch(`${job.apiBaseUrl}/agents/${encodeURIComponent(job.agentId)}/maintenance/a2a-update/${job.requestId}/report`, {
23
+ method: "POST",
24
+ headers: { authorization: `Bearer ${job.relayApiKey}`, "content-type": "application/json" },
25
+ body: JSON.stringify(body),
26
+ signal: AbortSignal.timeout(15_000),
27
+ }).catch(() => null);
28
+ return response?.ok === true;
29
+ }
30
+ async function resolveNpx() {
31
+ const candidates = [
32
+ join(dirname(process.execPath), "npx"),
33
+ "/opt/homebrew/bin/npx",
34
+ "/usr/local/bin/npx",
35
+ "/usr/bin/npx",
36
+ ];
37
+ for (const candidate of candidates) {
38
+ if (await access(candidate).then(() => true).catch(() => false))
39
+ return candidate;
40
+ }
41
+ throw new Error("npx_unavailable");
42
+ }
43
+ async function main() {
44
+ const path = jobPath();
45
+ const job = JSON.parse(await readFile(path, "utf8"));
46
+ if (job.schemaVersion !== 1 || !/^[0-9a-f-]{36}$/i.test(job.requestId) || !/^\d+\.\d+\.\d+/.test(job.targetVersion)) {
47
+ throw new Error("job_invalid");
48
+ }
49
+ await report(job, { state: "running" });
50
+ let receipt;
51
+ try {
52
+ const result = await execFileAsync(await resolveNpx(), [
53
+ "--yes",
54
+ `@perkos/perkos-a2a@${job.targetVersion}`,
55
+ "update-hermes",
56
+ "--agent-id",
57
+ job.agentId,
58
+ "--json",
59
+ ], { timeout: 8 * 60_000, maxBuffer: 1024 * 1024, encoding: "utf8" });
60
+ const lines = result.stdout.trim().split(/\r?\n/).filter(Boolean);
61
+ const parsed = JSON.parse(lines.at(-1) ?? "null");
62
+ if (!parsed || parsed.ok !== true || parsed.version !== job.targetVersion || parsed.secretsRedacted !== true) {
63
+ throw new Error("invalid_update_receipt");
64
+ }
65
+ receipt = { schemaVersion: 1, requestId: job.requestId, agentId: job.agentId, apiBaseUrl: job.apiBaseUrl, state: "completed", installedVersion: job.targetVersion };
66
+ }
67
+ catch {
68
+ receipt = { schemaVersion: 1, requestId: job.requestId, agentId: job.agentId, apiBaseUrl: job.apiBaseUrl, state: "failed", errorCode: "update_failed" };
69
+ }
70
+ const receiptPath = join(dirname(dirname(path)), "receipts", `${job.requestId}.json`);
71
+ await atomicPrivateJson(receiptPath, receipt);
72
+ if (await report(job, receipt.state === "completed"
73
+ ? { state: "completed", installedVersion: receipt.installedVersion }
74
+ : { state: "failed", errorCode: receipt.errorCode })) {
75
+ await unlink(receiptPath);
76
+ }
77
+ await unlink(path).catch(() => undefined);
78
+ }
79
+ main().catch(() => { process.exitCode = 1; });
80
+ //# sourceMappingURL=maintenance-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance-runner.js","sourceRoot":"","sources":["../src/maintenance-runner.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { connectOpenClaw } from "./connect.js";
3
- import { connectHermes, HermesConnectFailure } from "./hermes-connect.js";
3
+ import { connectHermes, HermesConnectFailure, resolveHermesUpdateOptions } from "./hermes-connect.js";
4
4
  import { RepairFailure, repairOpenClaw } from "./repair.js";
5
5
  import { upgradePrivateStorePlugin } from "./plugin-upgrade.js";
6
6
  function value(flag) {
@@ -32,6 +32,17 @@ async function main() {
32
32
  process.stdout.write(`${JSON.stringify(result)}\n`);
33
33
  return;
34
34
  }
35
+ if (command === "update-hermes") {
36
+ const existing = await resolveHermesUpdateOptions(required("--agent-id"));
37
+ const result = await connectHermes({
38
+ ...existing,
39
+ hermesHome: value("--hermes-home"),
40
+ hermesBin: value("--hermes-bin"),
41
+ timeoutMs: value("--timeout-ms") ? Number(value("--timeout-ms")) : undefined,
42
+ });
43
+ process.stdout.write(`${JSON.stringify(result)}\n`);
44
+ return;
45
+ }
35
46
  if (command === "connect-hermes") {
36
47
  const relayApiKey = value("--relay-api-key") ?? process.env.A2A_RELAY_API_KEY;
37
48
  if (!relayApiKey) {
@@ -52,7 +63,7 @@ async function main() {
52
63
  return;
53
64
  }
54
65
  if (command !== "repair" && command !== "connect") {
55
- throw new Error("usage: perkos-a2a <connect|repair|plugin-upgrade|connect-hermes> [command options] [--json]");
66
+ throw new Error("usage: perkos-a2a <connect|repair|plugin-upgrade|connect-hermes|update-hermes> [command options] [--json]");
56
67
  }
57
68
  const common = {
58
69
  artifactPath: required("--artifact"),
@@ -1 +1 @@
1
- {"version":3,"file":"repair-cli.js","sourceRoot":"","sources":["../src/repair-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repair-cli.js","sourceRoot":"","sources":["../src/repair-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ # Hermes secure self-update
2
+
3
+ ## Decision
4
+
5
+ Add an explicit `update-hermes` command for an already-connected native macOS
6
+ Hermes agent. The command accepts only the PerkOS agent id, locates that
7
+ identity's private managed installation, and reuses its existing relay
8
+ credential, agent name, relay URL, chat URL, and platform API URL without
9
+ printing or copying any secret into the conversation.
10
+
11
+ The update must fail closed when the managed configuration is absent,
12
+ malformed, or belongs to a different identity. It must never fall back from
13
+ the update path to a new production connection. Fresh invitations continue to
14
+ use `connect-hermes` and provide their scoped credential once.
15
+
16
+ This is preferable to asking an external private agent to paste its credential
17
+ again, exporting secrets into a model-visible prompt, or relying on a global
18
+ npm installation that may not match the supervised runtime.
19
+
20
+ ## Verification
21
+
22
+ Tests cover successful reuse, identity mismatch, missing managed state,
23
+ preservation of Dev endpoints, and secret-free CLI output. The full package
24
+ suite, typecheck, build, and a clean package install must remain green.
@@ -0,0 +1,66 @@
1
+ # Managed A2A self-update
2
+
3
+ ## Decision
4
+
5
+ Replace the model-facing `Update integration` prompt with a platform-managed,
6
+ one-time maintenance request. The model must never be asked to execute npm or
7
+ shell commands. PerkOS App creates the request through the authenticated API,
8
+ sends only an exact opaque marker through the existing agent chat, and polls
9
+ the API for the durable result.
10
+
11
+ The installed A2A bridge intercepts the marker before model delivery, claims
12
+ the request using its existing relay credential, acknowledges it, and launches
13
+ a detached updater. The updater reuses the managed Hermes identity and
14
+ configuration, reports a fixed-schema result to the API, and never includes a
15
+ credential, command output, or arbitrary model text in the response.
16
+
17
+ ## Protocol
18
+
19
+ 1. An authenticated owner creates an update request for an invited agent.
20
+ 2. The API chooses the allow-listed target package version, stores a random
21
+ request id with a short expiry, and returns `PERKOS_A2A_UPDATE:<requestId>`.
22
+ 3. A compatible bridge validates the exact marker and claims the request with
23
+ its relay API key. A Firestore transaction makes this claim single-use.
24
+ 4. The bridge returns a fixed acknowledgement and starts a detached Hermes
25
+ updater from a mode-0600 local job file.
26
+ 5. The updater runs the existing identity-preserving `update-hermes` flow and
27
+ reports `completed` or `failed` to the API with redacted, bounded fields.
28
+ 6. PerkOS App polls the request resource and renders the durable state:
29
+ `pending`, `claimed`, `running`, `completed`, `failed`, or `expired`.
30
+
31
+ The opaque marker is not an authorization credential. Claim and report calls
32
+ still require the agent's relay key, and the API verifies that the request is
33
+ pending, unexpired, and belongs to that exact agent. Target npm specs are never
34
+ accepted from either the App or the agent.
35
+
36
+ ## Compatibility and fallback
37
+
38
+ Bridges released before this protocol cannot intercept the marker. The UI must
39
+ therefore expose managed update only when runtime evidence advertises support.
40
+ Older or unknown installations show `Bootstrap required` and a concise manual
41
+ owner instruction. The fallback must not claim that an automatic update was
42
+ started.
43
+
44
+ The first implementation supports managed Hermes installations. Voice remains
45
+ an independent optional capability: A2A update availability must not imply
46
+ Voice support, installation, or enrollment.
47
+
48
+ ## Failure handling
49
+
50
+ - Requests expire and are idempotent after a terminal state.
51
+ - Duplicate claims return the existing state without launching another update.
52
+ - The detached updater writes no secret to argv, logs, chat, or API results.
53
+ - A restart or lost chat reply does not lose the result because API state is
54
+ authoritative.
55
+ - Unsupported runtimes fail closed with a fixed error code.
56
+ - The UI stops polling on terminal state or expiry and permits an owner retry
57
+ by creating a new request.
58
+
59
+ ## Verification
60
+
61
+ API tests cover ownership, relay authentication, expiry, single-use claims,
62
+ idempotent reports, and target-version allow-listing. A2A tests cover strict
63
+ marker parsing, model bypass, secure job creation, detached launch, redaction,
64
+ and result reporting. App tests cover supported and bootstrap-required states,
65
+ request dispatch, polling, terminal rendering, retry, localization, and the
66
+ absence of shell commands in chat prompts.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "perkos-a2a",
3
3
  "name": "PerkOS A2A",
4
- "version": "0.12.61",
4
+ "version": "0.12.63",
5
5
  "description": "Agent-to-Agent (A2A) protocol communication for OpenClaw agents",
6
6
  "author": "PerkOS",
7
7
  "configSchema": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perkos/perkos-a2a",
3
- "version": "0.12.61",
3
+ "version": "0.12.63",
4
4
  "description": "A2A Protocol communication plugin for OpenClaw — Agent-to-Agent protocol implementation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",