@amkentech/agent-channel 0.5.3 → 0.5.4
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 +2 -2
- package/bin/agent-channel.mjs +1 -1
- package/hooks/inbox.mjs +1 -1
- package/lib/paths.mjs +1 -1
- package/package.json +2 -2
- package/scripts/artifact.mjs +1 -1
- package/scripts/audit-verify.mjs +1 -1
- package/scripts/cli.mjs +1 -1
- package/scripts/join.mjs +1 -1
- package/scripts/listen.mjs +1 -1
- package/scripts/setup.mjs +1 -1
- package/scripts/verify.mjs +1 -1
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ npx @amkentech/agent-channel join <invite_code> <handle> "Your Name" # --
|
|
|
28
28
|
npx @amkentech/agent-channel doctor
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
`join` registers the MCP server in your client and merges two hooks into its config (`SessionStart`, `UserPromptSubmit`); it prints what it wrote. Restart the client. claude.ai, Claude Desktop, ChatGPT and Codex cloud connect by URL instead: see [/docs](https://
|
|
31
|
+
`join` registers the MCP server in your client and merges two hooks into its config (`SessionStart`, `UserPromptSubmit`); it prints what it wrote. Restart the client. claude.ai, Claude Desktop, ChatGPT and Codex cloud connect by URL instead: see [/docs](https://channel.amkentech.com/docs).
|
|
32
32
|
|
|
33
33
|
## What is underneath, in one paragraph each
|
|
34
34
|
|
|
@@ -44,6 +44,6 @@ npx @amkentech/agent-channel doctor
|
|
|
44
44
|
|
|
45
45
|
- the reference (ask a member; the server repo is private): every endpoint, tool, hook, adapter, the OAuth flow, ops, deploy.
|
|
46
46
|
- [SECURITY.md](SECURITY.md): what the design protects, what it does not, and how to report something.
|
|
47
|
-
- Live: [about](https://
|
|
47
|
+
- Live: [about](https://channel.amkentech.com/) · [connect](https://channel.amkentech.com/docs) · [status](https://channel.amkentech.com/status) · [security.txt](https://channel.amkentech.com/.well-known/security.txt)
|
|
48
48
|
|
|
49
49
|
Operated by Amken (amkentech.com), hello@amkentech.com. Single operator, no SOC 2, no SLA, no DPA yet; the about page says where data sits and how to leave.
|
package/bin/agent-channel.mjs
CHANGED
|
@@ -33,7 +33,7 @@ if (!cmd || !map[cmd]) {
|
|
|
33
33
|
call <tool> '<json args>'
|
|
34
34
|
verify <contract_id> ...
|
|
35
35
|
|
|
36
|
-
Server: ${process.env.AGENTCHAN_URL || "https://
|
|
36
|
+
Server: ${process.env.AGENTCHAN_URL || "https://channel.amkentech.com"} Tokens: ~/.agentchan/tok.<runtime>.json`);
|
|
37
37
|
process.exit(cmd ? 1 : 0);
|
|
38
38
|
}
|
|
39
39
|
const [script, ...pre] = map[cmd];
|
package/hooks/inbox.mjs
CHANGED
|
@@ -27,7 +27,7 @@ import { tokenFor } from "../lib/paths.mjs";
|
|
|
27
27
|
|
|
28
28
|
const runtime = (process.argv[2] || "claude").toLowerCase();
|
|
29
29
|
let eventName = process.argv[3] || "";
|
|
30
|
-
const url = (process.env.AGENTCHAN_URL || "https://
|
|
30
|
+
const url = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
31
31
|
const REPO = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
32
32
|
let token = tokenFor(runtime);
|
|
33
33
|
if (!token) process.exit(0);
|
package/lib/paths.mjs
CHANGED
|
@@ -13,7 +13,7 @@ import { fileURLToPath } from "node:url";
|
|
|
13
13
|
export const HOME_STORE = join(homedir(), ".agentchan");
|
|
14
14
|
export const CLIENT_HOME = join(HOME_STORE, "client"); // persistent copy of the client package (setup.mjs join)
|
|
15
15
|
export const CLIENT_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), ".."); // wherever this code runs from
|
|
16
|
-
export const BASE = (process.env.AGENTCHAN_URL || "https://
|
|
16
|
+
export const BASE = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
17
17
|
export const IN_NPX_CACHE = /[\\/]_npx[\\/]|[\\/]\.npm[\\/]_cacache|[\\/]npm-cache[\\/]/i.test(CLIENT_ROOT);
|
|
18
18
|
|
|
19
19
|
export const tokFileHome = (key) => join(HOME_STORE, "tok." + key + ".json");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amkentech/agent-channel",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "Send your Claude Code or Codex session, or a file, to another person in one line: encrypted read-only links (no account), or into a teammate's inbox via hooks + a remote MCP server. The server is a separate, private service.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"codex",
|
|
25
25
|
"collaboration"
|
|
26
26
|
],
|
|
27
|
-
"homepage": "https://
|
|
27
|
+
"homepage": "https://channel.amkentech.com/",
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@modelcontextprotocol/sdk": "^1.17.0",
|
package/scripts/artifact.mjs
CHANGED
|
@@ -20,7 +20,7 @@ const args = process.argv.slice(2);
|
|
|
20
20
|
const flag = (name) => { const i = args.indexOf(name); return i >= 0 ? args[i + 1] : undefined; };
|
|
21
21
|
const has = (name) => args.includes(name);
|
|
22
22
|
const runtime = (flag("--runtime") || process.env.AGENTCHAN_RUNTIME || "claude").toLowerCase();
|
|
23
|
-
const BASE = (process.env.AGENTCHAN_URL || "https://
|
|
23
|
+
const BASE = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
24
24
|
let token = process.env.AGENTCHAN_TOKEN;
|
|
25
25
|
if (runtime === "codex" && process.env.AGENTCHAN_CODEX_TOKEN) token = process.env.AGENTCHAN_CODEX_TOKEN;
|
|
26
26
|
if (!token) { const { tokenFor } = await import("../lib/paths.mjs"); token = tokenFor(runtime); }
|
package/scripts/audit-verify.mjs
CHANGED
|
@@ -46,7 +46,7 @@ if (wrapped && !args.includes("--no-sig")) {
|
|
|
46
46
|
let pem = null, from = "";
|
|
47
47
|
if (opt("--pubkey")) { pem = readFileSync(opt("--pubkey"), "utf8"); from = opt("--pubkey"); }
|
|
48
48
|
else {
|
|
49
|
-
const url = opt("--pubkey-url") || ((body.server || "https://
|
|
49
|
+
const url = opt("--pubkey-url") || ((body.server || "https://channel.amkentech.com").replace(/\/$/, "") + "/.well-known/agentchan-signing-key.json");
|
|
50
50
|
try { const j = await (await fetch(url, { signal: AbortSignal.timeout(10000) })).json(); pem = j.public_key_pem; from = url + " (kid " + j.kid + ")"; if (body.signing_key?.public_key_pem && body.signing_key.public_key_pem !== pem) console.log("note: the key embedded in the export differs from the one the server publishes now (rotation?)"); }
|
|
51
51
|
catch (e) { console.log("could not fetch the public key (" + e.message + "); pass --pubkey <pem> or --no-sig"); }
|
|
52
52
|
}
|
package/scripts/cli.mjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
4
4
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
5
5
|
|
|
6
|
-
const BASE = (process.env.AGENTCHAN_URL || "https://
|
|
6
|
+
const BASE = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
7
7
|
const token = process.env.AGENTCHAN_TOKEN;
|
|
8
8
|
const [tool, argsJson] = process.argv.slice(2);
|
|
9
9
|
if (!token || !tool) { console.error("usage: AGENTCHAN_TOKEN=ac_... cli.mjs <tool> '<json>'"); process.exit(1); }
|
package/scripts/join.mjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// node scripts/join.mjs <inv_code> <handle> "<Display Name>" <claude-code|codex|other> [model] [--email you@x.com]
|
|
4
4
|
// The token is printed ONCE. Put it in AGENTCHAN_TOKEN (Claude) or AGENTCHAN_CODEX_TOKEN (Codex) and wire your client (see README).
|
|
5
5
|
|
|
6
|
-
const BASE = (process.env.AGENTCHAN_URL || "https://
|
|
6
|
+
const BASE = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
7
7
|
const a = process.argv.slice(2);
|
|
8
8
|
const email = a.includes("--email") ? a[a.indexOf("--email") + 1] : undefined;
|
|
9
9
|
const pos = a.filter((x, i) => x !== "--email" && a[i - 1] !== "--email");
|
package/scripts/listen.mjs
CHANGED
|
@@ -29,7 +29,7 @@ async function codexPush(text) {
|
|
|
29
29
|
console.log("[listen] codex push " + (r.ok ? "ok (" + r.mode + ", thread " + String(r.threadId).slice(0, 8) + ")" : "skipped: " + r.reason));
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
const BASE = (process.env.AGENTCHAN_URL || "https://
|
|
32
|
+
const BASE = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
33
33
|
const rtArg = process.argv.includes("--runtime") ? process.argv[process.argv.indexOf("--runtime") + 1] : null;
|
|
34
34
|
let token = rtArg === "codex" ? (process.env.AGENTCHAN_CODEX_TOKEN || process.env.AGENTCHAN_TOKEN) : process.env.AGENTCHAN_TOKEN;
|
|
35
35
|
if (!token && rtArg) { const { tokenFor } = await import("../lib/paths.mjs"); token = tokenFor(rtArg); }
|
package/scripts/setup.mjs
CHANGED
|
@@ -29,7 +29,7 @@ if (IN_NPX_CACHE && !process.env.AGENTCHAN_NO_SELF_INSTALL) {
|
|
|
29
29
|
console.log(" installed client to " + CLIENT_HOME + " (hooks and the listener run from there; re-run join/wire from any npx to update)");
|
|
30
30
|
REPO = CLIENT_HOME;
|
|
31
31
|
}
|
|
32
|
-
const BASE = (process.env.AGENTCHAN_URL || "https://
|
|
32
|
+
const BASE = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
33
33
|
const args = process.argv.slice(2);
|
|
34
34
|
const cmd = args[0];
|
|
35
35
|
const opt = (k, d) => { const i = args.indexOf(k); return i >= 0 ? args[i + 1] : d; };
|
package/scripts/verify.mjs
CHANGED
|
@@ -16,7 +16,7 @@ import { execSync } from "node:child_process";
|
|
|
16
16
|
import { existsSync, readFileSync } from "node:fs";
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
|
|
19
|
-
const BASE = (process.env.AGENTCHAN_URL || "https://
|
|
19
|
+
const BASE = (process.env.AGENTCHAN_URL || "https://channel.amkentech.com").replace(/\/mcp$/, "");
|
|
20
20
|
const token = process.env.AGENTCHAN_TOKEN;
|
|
21
21
|
const args = process.argv.slice(2);
|
|
22
22
|
const proposalId = args.find((a) => !a.startsWith("--"));
|