arkitek-relay-skill 1.0.0 → 1.0.1
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/.env.example +2 -0
- package/README.md +28 -65
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +87 -17
- package/dist/index.js.map +1 -1
- package/package.json +8 -2
- package/scripts/postinstall.js +17 -0
package/.env.example
ADDED
package/README.md
CHANGED
|
@@ -22,77 +22,67 @@ The agent initiates all connections. Nothing is exposed on your network.
|
|
|
22
22
|
- An **OpenClaw agent** (or any agent framework — the handler interface is generic)
|
|
23
23
|
- An **ArkiTek account** at [arkitek.dev](https://arkitek.dev)
|
|
24
24
|
|
|
25
|
-
##
|
|
25
|
+
## Quick Start
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
28
|
npm install arkitek-relay-skill
|
|
29
|
+
npx arkitek-relay-skill
|
|
29
30
|
```
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
That's it. The skill will ask for your API key, save it, and connect your agent to ArkiTek automatically.
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
git clone https://github.com/raleighgardner16-source/arkitek-relay-skill.git
|
|
35
|
-
cd arkitek-relay-skill
|
|
36
|
-
npm install
|
|
37
|
-
npm run build
|
|
38
|
-
```
|
|
34
|
+
> **First time?** Get your API key at [arkitek.dev](https://arkitek.dev) — go to **Agents** → **Add Agent** → **Create** and copy the `ak_...` key.
|
|
39
35
|
|
|
40
|
-
##
|
|
36
|
+
## What Happens When You Run It
|
|
41
37
|
|
|
42
|
-
1.
|
|
43
|
-
2.
|
|
44
|
-
3.
|
|
45
|
-
4.
|
|
46
|
-
5. Copy the key immediately — it won't be shown again
|
|
38
|
+
1. If no API key is saved, the skill prompts you to paste one
|
|
39
|
+
2. The key is validated and saved to a local `.env` file (so you never have to enter it again)
|
|
40
|
+
3. The skill connects to ArkiTek over HTTPS
|
|
41
|
+
4. Your agent is live — send it a message from the ArkiTek UI
|
|
47
42
|
|
|
48
|
-
|
|
43
|
+
On subsequent runs, the saved key is loaded automatically and the agent reconnects.
|
|
49
44
|
|
|
50
|
-
##
|
|
45
|
+
## Changing or Rotating Your API Key
|
|
51
46
|
|
|
52
|
-
|
|
47
|
+
1. Stop the agent (Ctrl+C)
|
|
48
|
+
2. Delete or edit the `ARKITEK_API_KEY` line in your `.env` file
|
|
49
|
+
3. Run `npx arkitek-relay-skill` again — it will prompt for the new key
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
export ARKITEK_API_KEY=ak_your_api_key_here
|
|
56
|
-
```
|
|
51
|
+
If you deleted your agent in ArkiTek and want to reconnect, create a new agent in the dashboard, copy the new key, and follow the steps above.
|
|
57
52
|
|
|
58
|
-
|
|
53
|
+
## Disconnecting Your Agent
|
|
59
54
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
ARKITEK_AUTO_RECONNECT=true
|
|
63
|
-
```
|
|
55
|
+
1. Stop the agent process — this closes the connection to ArkiTek
|
|
56
|
+
2. Optionally delete the agent in ArkiTek's dashboard (**Agents** → select your agent → **Delete**)
|
|
64
57
|
|
|
65
|
-
|
|
58
|
+
The skill files remain installed locally. To fully remove: `npm uninstall arkitek-relay-skill`
|
|
59
|
+
|
|
60
|
+
## Configuration Options
|
|
61
|
+
|
|
62
|
+
The skill reads these from your `.env` file or environment variables:
|
|
66
63
|
|
|
67
64
|
| Variable | Required | Default | Description |
|
|
68
65
|
|----------|----------|---------|-------------|
|
|
69
66
|
| `ARKITEK_API_KEY` | Yes | — | Your agent's private API key from ArkiTek |
|
|
70
67
|
| `ARKITEK_AUTO_RECONNECT` | No | `true` | Auto-reconnect on network errors |
|
|
71
68
|
|
|
72
|
-
|
|
69
|
+
> **Security**: Your API key is a secret. The `.env` file is local only — never commit it to version control or share it publicly.
|
|
73
70
|
|
|
74
|
-
|
|
71
|
+
## Advanced: Using as a Library
|
|
72
|
+
|
|
73
|
+
If you're building your own agent and want to integrate the relay programmatically:
|
|
75
74
|
|
|
76
75
|
```typescript
|
|
77
76
|
import { createArkitekRelay } from "arkitek-relay-skill";
|
|
78
77
|
import type { IncomingMessage } from "arkitek-relay-skill";
|
|
79
78
|
|
|
80
|
-
// Define your message handler
|
|
81
79
|
async function handleMessage(message: IncomingMessage): Promise<string> {
|
|
82
|
-
console.log(`User said: ${message.content}`);
|
|
83
|
-
|
|
84
|
-
// Pass to your OpenClaw agent, LLM, or any processing logic
|
|
85
80
|
const response = await yourAgent.process(message.content, message.images);
|
|
86
|
-
|
|
87
81
|
return response;
|
|
88
82
|
}
|
|
89
83
|
|
|
90
|
-
// Create and connect the relay
|
|
91
84
|
const relay = createArkitekRelay(
|
|
92
|
-
{
|
|
93
|
-
apiKey: process.env.ARKITEK_API_KEY!,
|
|
94
|
-
autoReconnect: true,
|
|
95
|
-
},
|
|
85
|
+
{ apiKey: process.env.ARKITEK_API_KEY! },
|
|
96
86
|
handleMessage,
|
|
97
87
|
{
|
|
98
88
|
onConnect: (agentId) => console.log(`Connected as agent ${agentId}`),
|
|
@@ -104,33 +94,6 @@ const relay = createArkitekRelay(
|
|
|
104
94
|
await relay.connect();
|
|
105
95
|
```
|
|
106
96
|
|
|
107
|
-
### As a standalone script (echo mode)
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
ARKITEK_API_KEY=ak_your_key node dist/index.js
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
This starts the skill with a built-in echo handler — useful for testing that your connection works.
|
|
114
|
-
|
|
115
|
-
### With the RelayClient class directly
|
|
116
|
-
|
|
117
|
-
```typescript
|
|
118
|
-
import { RelayClient } from "arkitek-relay-skill";
|
|
119
|
-
|
|
120
|
-
const client = new RelayClient(
|
|
121
|
-
{ apiKey: process.env.ARKITEK_API_KEY! },
|
|
122
|
-
async (message) => {
|
|
123
|
-
// Your logic here
|
|
124
|
-
return `Processed: ${message.content}`;
|
|
125
|
-
}
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
await client.connect();
|
|
129
|
-
|
|
130
|
-
// Later...
|
|
131
|
-
client.disconnect();
|
|
132
|
-
```
|
|
133
|
-
|
|
134
97
|
## Council of LLMs (Optional)
|
|
135
98
|
|
|
136
99
|
ArkiTek's Council feature lets you query multiple LLMs simultaneously and get aggregated responses. This requires an active ArkiTek subscription.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
export { type ArkitekConfig, type ArkitekRelayEvents, type IncomingMessage, type MessageHandler, type ConnectionState, type ConnectedEvent, type PingEvent, type RespondPayload, type RespondResponse, type CouncilRequest, type CouncilResponse, type CouncilModelResponse, } from "./types.js";
|
|
2
3
|
export { RelayClient } from "./relay.js";
|
|
3
4
|
export { maskKey, validateApiKey, checkTlsSafety, warnIfNotHttps } from "./validation.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAIpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,WAAW,CAEb"}
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
export { RelayClient } from "./relay.js";
|
|
2
3
|
export { maskKey, validateApiKey, checkTlsSafety, warnIfNotHttps } from "./validation.js";
|
|
3
4
|
export { queryCouncil } from "./council.js";
|
|
4
|
-
import { LOG_PREFIX } from "./types.js";
|
|
5
|
+
import { LOG_PREFIX, API_KEY_PATTERN, } from "./types.js";
|
|
5
6
|
import { RelayClient } from "./relay.js";
|
|
6
7
|
import { fileURLToPath } from "node:url";
|
|
7
8
|
import { resolve } from "node:path";
|
|
9
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
10
|
+
import { createInterface } from "node:readline";
|
|
8
11
|
export function createArkitekRelay(config, handler, events) {
|
|
9
12
|
return new RelayClient(config, handler, events);
|
|
10
13
|
}
|
|
14
|
+
function loadEnvFile() {
|
|
15
|
+
const envPath = resolve(process.cwd(), ".env");
|
|
16
|
+
if (!existsSync(envPath))
|
|
17
|
+
return;
|
|
18
|
+
const content = readFileSync(envPath, "utf-8");
|
|
19
|
+
for (const line of content.split("\n")) {
|
|
20
|
+
const trimmed = line.trim();
|
|
21
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
22
|
+
continue;
|
|
23
|
+
const eqIdx = trimmed.indexOf("=");
|
|
24
|
+
if (eqIdx === -1)
|
|
25
|
+
continue;
|
|
26
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
27
|
+
const value = trimmed.slice(eqIdx + 1).trim();
|
|
28
|
+
if (!process.env[key]) {
|
|
29
|
+
process.env[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function promptForKey() {
|
|
34
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
35
|
+
return new Promise((res) => {
|
|
36
|
+
rl.question(" Paste your API key here: ", (answer) => {
|
|
37
|
+
rl.close();
|
|
38
|
+
res(answer.trim());
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function saveKeyToEnv(apiKey) {
|
|
43
|
+
const envPath = resolve(process.cwd(), ".env");
|
|
44
|
+
if (existsSync(envPath)) {
|
|
45
|
+
let content = readFileSync(envPath, "utf-8");
|
|
46
|
+
if (content.includes("ARKITEK_API_KEY=")) {
|
|
47
|
+
content = content.replace(/ARKITEK_API_KEY=.*/, `ARKITEK_API_KEY=${apiKey}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
content = content.trimEnd() + `\nARKITEK_API_KEY=${apiKey}\n`;
|
|
51
|
+
}
|
|
52
|
+
writeFileSync(envPath, content);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
writeFileSync(envPath, `ARKITEK_API_KEY=${apiKey}\nARKITEK_AUTO_RECONNECT=true\n`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
11
58
|
const isMainModule = typeof process !== "undefined" &&
|
|
12
59
|
process.argv[1] &&
|
|
13
60
|
fileURLToPath(import.meta.url) === resolve(process.argv[1]);
|
|
14
61
|
if (isMainModule) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
62
|
+
(async () => {
|
|
63
|
+
loadEnvFile();
|
|
64
|
+
let apiKey = process.env.ARKITEK_API_KEY;
|
|
65
|
+
if (!apiKey) {
|
|
66
|
+
if (!process.stdin.isTTY) {
|
|
67
|
+
console.error(`${LOG_PREFIX} ARKITEK_API_KEY environment variable is required`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
console.log(`\n${LOG_PREFIX} Welcome! Let's connect your agent to ArkiTek.\n`);
|
|
71
|
+
console.log(" 1. Go to https://arkitek.dev");
|
|
72
|
+
console.log(" 2. Navigate to Agents → Add Agent → Create");
|
|
73
|
+
console.log(" 3. Copy the API key (starts with ak_)\n");
|
|
74
|
+
apiKey = await promptForKey();
|
|
75
|
+
if (!apiKey) {
|
|
76
|
+
console.error(`\n${LOG_PREFIX} No key provided. Exiting.`);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
if (!API_KEY_PATTERN.test(apiKey)) {
|
|
80
|
+
console.error(`\n${LOG_PREFIX} Invalid key format. Keys start with ak_ and are 67 characters.`);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
saveKeyToEnv(apiKey);
|
|
84
|
+
process.env.ARKITEK_API_KEY = apiKey;
|
|
85
|
+
console.log(`\n${LOG_PREFIX} API key saved to .env — you won't need to enter it again.`);
|
|
86
|
+
}
|
|
87
|
+
const autoReconnect = process.env.ARKITEK_AUTO_RECONNECT !== "false";
|
|
88
|
+
const echoHandler = async (message) => {
|
|
89
|
+
console.log(`${LOG_PREFIX} [Echo] Received: ${message.content.slice(0, 100)}`);
|
|
90
|
+
return `Echo: ${message.content}`;
|
|
91
|
+
};
|
|
92
|
+
const relay = createArkitekRelay({ apiKey, autoReconnect }, echoHandler, {
|
|
93
|
+
onConnect: (agentId) => console.log(`${LOG_PREFIX} Connected! Agent ${agentId} is live and listening for messages.`),
|
|
94
|
+
onDisconnect: (reason) => console.log(`${LOG_PREFIX} Disconnected: ${reason}`),
|
|
95
|
+
onError: (err) => console.error(`${LOG_PREFIX} Error: ${err.message}`),
|
|
96
|
+
});
|
|
97
|
+
console.log(`${LOG_PREFIX} Connecting to ArkiTek...`);
|
|
98
|
+
await relay.connect();
|
|
99
|
+
console.log(`${LOG_PREFIX} Ready. Send a message from the ArkiTek UI to test.`);
|
|
100
|
+
})().catch((err) => {
|
|
31
101
|
console.error(`${LOG_PREFIX} Fatal:`, err);
|
|
32
102
|
process.exit(1);
|
|
33
103
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arkitek-relay-skill",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Connect your OpenClaw agent to ArkiTek via secure outbound SSE relay",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,13 +11,17 @@
|
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"type": "module",
|
|
14
|
+
"bin": {
|
|
15
|
+
"arkitek-relay-skill": "dist/index.js"
|
|
16
|
+
},
|
|
14
17
|
"scripts": {
|
|
15
18
|
"build": "tsc",
|
|
16
19
|
"start": "node dist/index.js",
|
|
17
20
|
"dev": "tsc --watch",
|
|
18
21
|
"test": "vitest run",
|
|
19
22
|
"test:watch": "vitest",
|
|
20
|
-
"clean": "rm -rf dist"
|
|
23
|
+
"clean": "rm -rf dist",
|
|
24
|
+
"postinstall": "node scripts/postinstall.js"
|
|
21
25
|
},
|
|
22
26
|
"engines": {
|
|
23
27
|
"node": ">=18.0.0"
|
|
@@ -33,6 +37,8 @@
|
|
|
33
37
|
"author": "",
|
|
34
38
|
"files": [
|
|
35
39
|
"dist",
|
|
40
|
+
"scripts/postinstall.js",
|
|
41
|
+
".env.example",
|
|
36
42
|
"README.md",
|
|
37
43
|
"LICENSE"
|
|
38
44
|
],
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const BOLD = "\x1b[1m";
|
|
4
|
+
const CYAN = "\x1b[36m";
|
|
5
|
+
const YELLOW = "\x1b[33m";
|
|
6
|
+
const DIM = "\x1b[2m";
|
|
7
|
+
const RESET = "\x1b[0m";
|
|
8
|
+
|
|
9
|
+
console.log(`
|
|
10
|
+
${BOLD}${CYAN}arkitek-relay-skill${RESET} installed!
|
|
11
|
+
|
|
12
|
+
Run this to set up and connect your agent:
|
|
13
|
+
|
|
14
|
+
${YELLOW}npx arkitek-relay-skill${RESET}
|
|
15
|
+
|
|
16
|
+
${DIM}You'll be asked for your API key from https://arkitek.dev${RESET}
|
|
17
|
+
`);
|