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 ADDED
@@ -0,0 +1,2 @@
1
+ ARKITEK_API_KEY=ak_your_api_key_here
2
+ ARKITEK_AUTO_RECONNECT=true
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
- ## Installation
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
- Or clone and build from source:
32
+ That's it. The skill will ask for your API key, save it, and connect your agent to ArkiTek automatically.
32
33
 
33
- ```bash
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
- ## Getting Your API Key
36
+ ## What Happens When You Run It
41
37
 
42
- 1. Log in to [arkitek.dev](https://arkitek.dev)
43
- 2. Navigate to **Agents** **Add Agent**
44
- 3. Give your agent a name and description
45
- 4. Click **Create**you'll receive a private API key (starts with `ak_`)
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
- > **Security**: Your API key is a secret. Never commit it to version control, share it publicly, or log it. Use environment variables.
43
+ On subsequent runs, the saved key is loaded automatically and the agent reconnects.
49
44
 
50
- ## Configuration
45
+ ## Changing or Rotating Your API Key
51
46
 
52
- Set your API key as an environment variable:
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
- ```bash
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
- Or use a `.env` file (see `.env.example`):
53
+ ## Disconnecting Your Agent
59
54
 
60
- ```
61
- ARKITEK_API_KEY=ak_your_api_key_here
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
- ### Configuration Options
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
- ## Usage
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
- ### As an imported module
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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAc,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,WAAW,CAEb"}
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
- const apiKey = process.env.ARKITEK_API_KEY;
16
- if (!apiKey) {
17
- console.error(`${LOG_PREFIX} ARKITEK_API_KEY environment variable is required`);
18
- process.exit(1);
19
- }
20
- const autoReconnect = process.env.ARKITEK_AUTO_RECONNECT !== "false";
21
- const echoHandler = async (message) => {
22
- console.log(`${LOG_PREFIX} [Echo] Received: ${message.content.slice(0, 100)}`);
23
- return `Echo: ${message.content}`;
24
- };
25
- const relay = createArkitekRelay({ apiKey, autoReconnect }, echoHandler, {
26
- onConnect: (agentId) => console.log(`${LOG_PREFIX} Agent ${agentId} connected`),
27
- onDisconnect: (reason) => console.log(`${LOG_PREFIX} Disconnected: ${reason}`),
28
- onError: (err) => console.error(`${LOG_PREFIX} Error: ${err.message}`),
29
- });
30
- relay.connect().catch((err) => {
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":"AAeA,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,EAAoE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,OAAuB,EACvB,MAA2B;IAE3B,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,YAAY,GAChB,OAAO,OAAO,KAAK,WAAW;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,IAAI,YAAY,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,mDAAmD,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,OAAO,CAAC;IAErE,MAAM,WAAW,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;QACpD,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,qBAAqB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,kBAAkB,CAC9B,EAAE,MAAM,EAAE,aAAa,EAAE,EACzB,WAAW,EACX;QACE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,UAAU,OAAO,YAAY,CAAC;QAC/E,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,kBAAkB,MAAM,EAAE,CAAC;QAC9E,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC;KACvE,CACF,CAAC;IAEF,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACrC,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,SAAS,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAiBA,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,EAKL,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,OAAuB,EACvB,MAA2B;IAE3B,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO;IACjC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,EAAE,CAAC,QAAQ,CAAC,6BAA6B,EAAE,CAAC,MAAM,EAAE,EAAE;YACpD,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,qBAAqB,MAAM,IAAI,CAAC;QAChE,CAAC;QACD,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,aAAa,CACX,OAAO,EACP,mBAAmB,MAAM,iCAAiC,CAC3D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAChB,OAAO,OAAO,KAAK,WAAW;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,IAAI,YAAY,EAAE,CAAC;IACjB,CAAC,KAAK,IAAI,EAAE;QACV,WAAW,EAAE,CAAC;QAEd,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,mDAAmD,CAAC,CAAC;gBAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,kDAAkD,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YAEzD,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,KAAK,UAAU,4BAA4B,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,KAAK,UAAU,iEAAiE,CAAC,CAAC;gBAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,4DAA4D,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,OAAO,CAAC;QAErE,MAAM,WAAW,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;YACpD,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,qBAAqB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/E,OAAO,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,kBAAkB,CAC9B,EAAE,MAAM,EAAE,aAAa,EAAE,EACzB,WAAW,EACX;YACE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CACrB,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,qBAAqB,OAAO,sCAAsC,CAAC;YAC9F,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CACvB,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,kBAAkB,MAAM,EAAE,CAAC;YACtD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACf,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC;SACvD,CACF,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,2BAA2B,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,qDAAqD,CAAC,CAAC;IAClF,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,SAAS,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkitek-relay-skill",
3
- "version": "1.0.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
+ `);