hiloop-openclaw 0.1.0 → 0.3.0

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/dist/index.d.ts CHANGED
@@ -1,32 +1,30 @@
1
- import { HiloopChannelMonitor, HiloopChannelSender, type Gateway } from "./src/channel.js";
2
- import { type ToolRegistrar } from "./src/tools.js";
3
- export type { HiloopConfig } from "./src/config.js";
4
- export { HiloopConfigSchema } from "./src/config.js";
5
- export { HiloopApiClient } from "./src/api-client.js";
6
- export { HiloopChannelMonitor, HiloopChannelSender, } from "./src/channel.js";
7
- export { registerHiloopTools } from "./src/tools.js";
8
- export interface PluginContext {
9
- config: {
10
- channels: {
11
- hiloop?: Record<string, unknown>;
12
- };
13
- };
14
- gateway: Gateway & ToolRegistrar;
15
- logger: {
16
- info(msg: string, ...args: unknown[]): void;
17
- warn(msg: string, ...args: unknown[]): void;
18
- error(msg: string, ...args: unknown[]): void;
1
+ import { HiloopChannelConfig } from "./src/config.js";
2
+ import { outbound, inbound, login } from "./src/channel.js";
3
+ import { createTools } from "./src/tools.js";
4
+ declare function registerChannel(channel: {
5
+ id: string;
6
+ meta: {
7
+ label: string;
8
+ description: string;
19
9
  };
20
- }
21
- /**
22
- * OpenClaw plugin entry point.
23
- *
24
- * Called by the OpenClaw runtime when this plugin is loaded.
25
- * Reads config from `context.config.channels.hiloop`, sets up
26
- * the channel monitor (inbound), sender (outbound), and tools.
27
- */
28
- export declare function initialize(context: PluginContext): {
29
- monitor: HiloopChannelMonitor;
30
- sender: HiloopChannelSender;
31
- shutdown: () => void;
32
- };
10
+ capabilities: string[];
11
+ config: typeof HiloopChannelConfig;
12
+ outbound: typeof outbound;
13
+ inbound: typeof inbound;
14
+ login: typeof login;
15
+ tools?: ReturnType<typeof createTools>;
16
+ }): void;
17
+ declare function registerTool(tool: {
18
+ name: string;
19
+ description: string;
20
+ parameters: unknown;
21
+ execute: (params: Record<string, unknown>, ctx: unknown) => Promise<unknown>;
22
+ }): void;
23
+ export { HiloopChannelConfig } from "./src/config.js";
24
+ export { HiloopApiClient } from "./src/api-client.js";
25
+ export { outbound, inbound, login } from "./src/channel.js";
26
+ export { createTools } from "./src/tools.js";
27
+ export default function setup(api: {
28
+ registerChannel: typeof registerChannel;
29
+ registerTool: typeof registerTool;
30
+ }): void;
package/dist/index.js CHANGED
@@ -1,41 +1,35 @@
1
- import { HiloopConfigSchema } from "./src/config.js";
2
- import { HiloopApiClient } from "./src/api-client.js";
3
- import { HiloopChannelMonitor, HiloopChannelSender, } from "./src/channel.js";
4
- import { registerHiloopTools } from "./src/tools.js";
5
- export { HiloopConfigSchema } from "./src/config.js";
1
+ import { HiloopChannelConfig } from "./src/config.js";
2
+ import { outbound, inbound, login } from "./src/channel.js";
3
+ import { createTools } from "./src/tools.js";
4
+ // Re-export for programmatic use
5
+ export { HiloopChannelConfig } from "./src/config.js";
6
6
  export { HiloopApiClient } from "./src/api-client.js";
7
- export { HiloopChannelMonitor, HiloopChannelSender, } from "./src/channel.js";
8
- export { registerHiloopTools } from "./src/tools.js";
9
- /**
10
- * OpenClaw plugin entry point.
11
- *
12
- * Called by the OpenClaw runtime when this plugin is loaded.
13
- * Reads config from `context.config.channels.hiloop`, sets up
14
- * the channel monitor (inbound), sender (outbound), and tools.
15
- */
16
- export function initialize(context) {
17
- const rawConfig = context.config.channels.hiloop;
18
- if (!rawConfig) {
19
- throw new Error("[hiloop] Missing channel config. Add channels.hiloop to your openclaw.json.");
20
- }
21
- const config = HiloopConfigSchema.parse(rawConfig);
22
- const client = new HiloopApiClient(config);
23
- // Set up channel monitor (human -> OpenClaw)
24
- const monitor = new HiloopChannelMonitor(client, config, context.gateway);
25
- // Set up channel sender (OpenClaw -> human)
26
- const sender = new HiloopChannelSender(client, config);
27
- // Register Hiloop-specific tools
28
- registerHiloopTools(context.gateway, client, config);
29
- // Start polling for inbound messages
30
- monitor.start();
31
- context.logger.info(`[hiloop] Channel active, polling every ${config.pollIntervalMs}ms`);
32
- return {
33
- monitor,
34
- sender,
35
- shutdown: () => {
36
- monitor.stop();
37
- context.logger.info("[hiloop] Channel stopped");
7
+ export { outbound, inbound, login } from "./src/channel.js";
8
+ export { createTools } from "./src/tools.js";
9
+ // OpenClaw plugin entry point
10
+ // Called by OpenClaw gateway when the plugin is loaded
11
+ export default function setup(api) {
12
+ api.registerChannel({
13
+ id: "hiloop",
14
+ meta: {
15
+ label: "Hiloop",
16
+ description: "Human-in-the-loop: approvals, chat, reviews, forms, live sessions, voice.",
38
17
  },
39
- };
18
+ capabilities: ["dm"],
19
+ config: HiloopChannelConfig,
20
+ outbound,
21
+ inbound,
22
+ login,
23
+ });
24
+ // Register all Hiloop tools so the agent can use them directly
25
+ // Config is resolved at runtime from channels.hiloop
26
+ const defaultCfg = HiloopChannelConfig.parse({
27
+ apiKey: "hlp_placeholder",
28
+ });
29
+ // Tools are registered lazily -- OpenClaw injects resolved config at call time
30
+ const tools = createTools(defaultCfg);
31
+ for (const tool of tools) {
32
+ api.registerTool(tool);
33
+ }
40
34
  }
41
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAsB,MAAM,gBAAgB,CAAC;AAGzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAiBrD;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,OAAsB;IAK/C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAiB,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAE3C,6CAA6C;IAC7C,MAAM,OAAO,GAAG,IAAI,oBAAoB,CACtC,MAAM,EACN,MAAM,EACN,OAAO,CAAC,OAAO,CAChB,CAAC;IAEF,4CAA4C;IAC5C,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvD,iCAAiC;IACjC,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAErD,qCAAqC;IACrC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,0CAA0C,MAAM,CAAC,cAAc,IAAI,CACpE,CAAC;IAEF,OAAO;QACL,OAAO;QACP,MAAM;QACN,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAqB7C,iCAAiC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,8BAA8B;AAC9B,uDAAuD;AACvD,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAG7B;IACC,GAAG,CAAC,eAAe,CAAC;QAClB,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE;YACJ,KAAK,EAAE,QAAQ;YACf,WAAW,EACT,2EAA2E;SAC9E;QACD,YAAY,EAAE,CAAC,IAAI,CAAC;QACpB,MAAM,EAAE,mBAAmB;QAC3B,QAAQ;QACR,OAAO;QACP,KAAK;KACN,CAAC,CAAC;IAEH,+DAA+D;IAC/D,qDAAqD;IACrD,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC;QAC3C,MAAM,EAAE,iBAAiB;KAC1B,CAAC,CAAC;IAEH,+EAA+E;IAC/E,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { HiloopConfig } from "./config.js";
1
+ import type { HiloopChannelConfig } from "./config.js";
2
2
  export interface CreateInteractionParams {
3
3
  type: "approval" | "chat" | "review" | "form" | "notification" | "live_session" | "voice_call" | "payment" | "scheduled_call";
4
4
  encryptedTitle: string;
@@ -52,7 +52,7 @@ export interface QuotaResponse {
52
52
  export declare class HiloopApiClient {
53
53
  private baseUrl;
54
54
  private apiKey;
55
- constructor(config: HiloopConfig);
55
+ constructor(config: HiloopChannelConfig);
56
56
  private apiFetch;
57
57
  createInteraction(params: CreateInteractionParams): Promise<Interaction>;
58
58
  getInteraction(id: string): Promise<Interaction>;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/api-client.ts"],"names":[],"mappings":"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"}
@@ -1,52 +1,21 @@
1
- import type { HiloopApiClient } from "./api-client.js";
2
- import type { HiloopConfig } from "./config.js";
3
- export interface MessageEnvelope {
4
- channel: string;
5
- chatType: "dm" | "group";
6
- sender: {
7
- id: string;
8
- name: string;
9
- };
10
- content: string;
11
- threadId: string;
12
- timestamp: string;
1
+ import type { HiloopChannelConfig } from "./config.js";
2
+ export interface OutboundMessage {
3
+ text: string;
4
+ threadId?: string;
13
5
  metadata?: Record<string, unknown>;
14
6
  }
15
- export interface ChannelStatusReport {
16
- connected: boolean;
17
- channel: string;
18
- account?: string;
19
- error?: string;
20
- quotaUsed?: number;
21
- quotaLimit?: number;
22
- }
23
- export interface Gateway {
24
- handleChannelMessage(envelope: MessageEnvelope): Promise<void>;
25
- }
26
- export declare class HiloopChannelMonitor {
27
- private client;
28
- private config;
29
- private gateway;
30
- private deliveredInteractions;
31
- private lastMessageIds;
32
- private pollTimer;
33
- constructor(client: HiloopApiClient, config: HiloopConfig, gateway: Gateway);
34
- start(): void;
35
- stop(): void;
36
- private poll;
37
- private deliverInteraction;
38
- private checkNewMessages;
39
- private filterNewMessages;
40
- }
41
- export declare class HiloopChannelSender {
42
- private client;
43
- private config;
44
- private threadToInteraction;
45
- constructor(client: HiloopApiClient, config: HiloopConfig);
46
- /** Map an existing thread to a Hiloop interaction */
47
- trackThread(threadId: string, interactionId: string): void;
48
- send(threadId: string, content: string): Promise<{
49
- interactionId: string;
50
- }>;
51
- getStatus(): Promise<ChannelStatusReport>;
7
+ export interface MessageEnvelope {
8
+ channelId: string;
9
+ senderId: string;
10
+ senderName?: string;
11
+ text: string;
12
+ threadId?: string;
13
+ timestamp: number;
14
+ metadata?: Record<string, unknown>;
52
15
  }
16
+ type EmitFn = (msg: MessageEnvelope) => void;
17
+ type UnsubscribeFn = () => void;
18
+ export declare function outbound(msg: OutboundMessage, cfg: HiloopChannelConfig): Promise<void>;
19
+ export declare function inbound(cfg: HiloopChannelConfig, emit: EmitFn): Promise<UnsubscribeFn>;
20
+ export declare function login(cfg: HiloopChannelConfig): Promise<void>;
21
+ export {};
@@ -1,168 +1,89 @@
1
- export class HiloopChannelMonitor {
2
- client;
3
- config;
4
- gateway;
5
- deliveredInteractions = new Set();
6
- lastMessageIds = new Map();
7
- pollTimer = null;
8
- constructor(client, config, gateway) {
9
- this.client = client;
10
- this.config = config;
11
- this.gateway = gateway;
1
+ import { HiloopApiClient } from "./api-client.js";
2
+ // Track threadId -> interactionId mapping
3
+ const threadMap = new Map();
4
+ // Track delivered message IDs to avoid duplicates
5
+ const deliveredMessages = new Set();
6
+ const deliveredInteractions = new Set();
7
+ export async function outbound(msg, cfg) {
8
+ const client = new HiloopApiClient(cfg);
9
+ const threadId = msg.threadId || `oc_${Date.now()}`;
10
+ const existingId = threadMap.get(threadId);
11
+ if (existingId) {
12
+ await client.sendMessage(existingId, msg.text);
12
13
  }
13
- start() {
14
- if (this.pollTimer)
15
- return;
16
- this.pollTimer = setInterval(() => void this.poll(), this.config.pollIntervalMs);
17
- // Run an immediate first poll
18
- void this.poll();
19
- }
20
- stop() {
21
- if (this.pollTimer) {
22
- clearInterval(this.pollTimer);
23
- this.pollTimer = null;
24
- }
14
+ else {
15
+ const interaction = await client.createInteraction({
16
+ type: "chat",
17
+ encryptedTitle: msg.text.slice(0, 100),
18
+ encryptedDescription: msg.text,
19
+ priority: cfg.defaultPriority,
20
+ });
21
+ threadMap.set(threadId, interaction.id);
25
22
  }
26
- async poll() {
27
- try {
28
- // Check for responded interactions
29
- const { interactions } = await this.client.listInteractions({
30
- status: "responded",
31
- });
32
- for (const interaction of interactions) {
33
- if (!this.deliveredInteractions.has(interaction.id)) {
34
- await this.deliverInteraction(interaction);
35
- this.deliveredInteractions.add(interaction.id);
23
+ }
24
+ export async function inbound(cfg, emit) {
25
+ const client = new HiloopApiClient(cfg);
26
+ let running = true;
27
+ const poll = async () => {
28
+ while (running) {
29
+ try {
30
+ // Check responded interactions (approvals, reviews, etc.)
31
+ const { interactions } = await client.listInteractions({
32
+ status: "responded",
33
+ });
34
+ for (const ix of interactions) {
35
+ if (!deliveredInteractions.has(ix.id)) {
36
+ deliveredInteractions.add(ix.id);
37
+ emit({
38
+ channelId: "hiloop",
39
+ senderId: ix.respondedBy || "human",
40
+ text: ix.encryptedResponse || `[${ix.type} responded]`,
41
+ threadId: ix.id,
42
+ timestamp: Date.parse(ix.respondedAt || ix.updatedAt),
43
+ metadata: {
44
+ interactionType: ix.type,
45
+ status: ix.status,
46
+ },
47
+ });
48
+ }
36
49
  }
37
- }
38
- // Check for new messages on active chat interactions
39
- const activeChats = await this.client.listInteractions({
40
- status: "assigned",
41
- type: "chat",
42
- });
43
- for (const chat of activeChats.interactions) {
44
- await this.checkNewMessages(chat);
45
- }
46
- }
47
- catch (err) {
48
- console.error("[hiloop] Poll error:", err);
49
- }
50
- }
51
- async deliverInteraction(interaction) {
52
- // For chat interactions, deliver the latest messages
53
- if (interaction.type === "chat") {
54
- await this.checkNewMessages(interaction);
55
- return;
56
- }
57
- // For other types (approval, review, form, etc.), deliver the response
58
- const envelope = {
59
- channel: "hiloop",
60
- chatType: "dm",
61
- sender: {
62
- id: interaction.respondedBy || "unknown",
63
- name: interaction.respondedBy || "Human",
64
- },
65
- content: interaction.encryptedResponse || "[responded]",
66
- threadId: interaction.id,
67
- timestamp: interaction.respondedAt || interaction.updatedAt,
68
- metadata: {
69
- interactionType: interaction.type,
70
- status: interaction.status,
71
- priority: interaction.priority,
72
- },
73
- };
74
- await this.gateway.handleChannelMessage(envelope);
75
- }
76
- async checkNewMessages(interaction) {
77
- try {
78
- const { messages } = await this.client.listMessages(interaction.id);
79
- const lastKnown = this.lastMessageIds.get(interaction.id);
80
- const newMessages = this.filterNewMessages(messages, lastKnown);
81
- for (const msg of newMessages) {
82
- if (msg.sender === "human") {
83
- const envelope = {
84
- channel: "hiloop",
85
- chatType: "dm",
86
- sender: {
87
- id: msg.senderId || "unknown",
88
- name: msg.senderName || "Human",
89
- },
90
- content: msg.encryptedContent,
91
- threadId: interaction.id,
92
- timestamp: msg.createdAt,
93
- metadata: {
94
- messageId: msg.id,
95
- interactionType: interaction.type,
96
- },
97
- };
98
- await this.gateway.handleChannelMessage(envelope);
50
+ // Check new messages on active chat interactions
51
+ const chats = await client.listInteractions({
52
+ status: "assigned",
53
+ type: "chat",
54
+ });
55
+ for (const chat of chats.interactions) {
56
+ const { messages } = await client.listMessages(chat.id);
57
+ for (const msg of messages) {
58
+ if (msg.sender === "human" && !deliveredMessages.has(msg.id)) {
59
+ deliveredMessages.add(msg.id);
60
+ emit({
61
+ channelId: "hiloop",
62
+ senderId: msg.senderId || "human",
63
+ senderName: msg.senderName,
64
+ text: msg.encryptedContent,
65
+ threadId: chat.id,
66
+ timestamp: Date.parse(msg.createdAt),
67
+ metadata: { messageId: msg.id },
68
+ });
69
+ }
70
+ }
99
71
  }
100
72
  }
101
- if (messages.length > 0) {
102
- this.lastMessageIds.set(interaction.id, messages[messages.length - 1].id);
73
+ catch (err) {
74
+ console.error("[hiloop] poll error:", err);
103
75
  }
76
+ await new Promise((r) => setTimeout(r, cfg.pollIntervalMs));
104
77
  }
105
- catch (err) {
106
- console.error(`[hiloop] Error checking messages for ${interaction.id}:`, err);
107
- }
108
- }
109
- filterNewMessages(messages, lastKnownId) {
110
- if (!lastKnownId)
111
- return messages;
112
- const idx = messages.findIndex((m) => m.id === lastKnownId);
113
- if (idx === -1)
114
- return messages;
115
- return messages.slice(idx + 1);
116
- }
78
+ };
79
+ // Start polling in background
80
+ poll();
81
+ return () => {
82
+ running = false;
83
+ };
117
84
  }
118
- export class HiloopChannelSender {
119
- client;
120
- config;
121
- // Maps OpenClaw threadId -> Hiloop interactionId
122
- threadToInteraction = new Map();
123
- constructor(client, config) {
124
- this.client = client;
125
- this.config = config;
126
- }
127
- /** Map an existing thread to a Hiloop interaction */
128
- trackThread(threadId, interactionId) {
129
- this.threadToInteraction.set(threadId, interactionId);
130
- }
131
- async send(threadId, content) {
132
- const existingId = this.threadToInteraction.get(threadId);
133
- if (existingId) {
134
- // Send a message on the existing interaction
135
- await this.client.sendMessage(existingId, content);
136
- return { interactionId: existingId };
137
- }
138
- // Create a new chat interaction
139
- const interaction = await this.client.createInteraction({
140
- type: "chat",
141
- encryptedTitle: content.slice(0, 100),
142
- encryptedDescription: content,
143
- priority: this.config.defaultPriority,
144
- });
145
- this.threadToInteraction.set(threadId, interaction.id);
146
- return { interactionId: interaction.id };
147
- }
148
- async getStatus() {
149
- try {
150
- const quota = await this.client.checkQuota();
151
- return {
152
- connected: true,
153
- channel: "hiloop",
154
- account: quota.plan,
155
- quotaUsed: quota.used,
156
- quotaLimit: quota.limit,
157
- };
158
- }
159
- catch (err) {
160
- return {
161
- connected: false,
162
- channel: "hiloop",
163
- error: err instanceof Error ? err.message : String(err),
164
- };
165
- }
166
- }
85
+ export async function login(cfg) {
86
+ const client = new HiloopApiClient(cfg);
87
+ await client.checkQuota(); // validates credentials
167
88
  }
168
89
  //# sourceMappingURL=channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,21 @@
1
1
  import { z } from "zod";
2
- export declare const HiloopConfigSchema: z.ZodObject<{
2
+ export declare const HiloopChannelConfig: z.ZodObject<{
3
3
  apiKey: z.ZodString;
4
4
  baseUrl: z.ZodDefault<z.ZodString>;
5
5
  pollIntervalMs: z.ZodDefault<z.ZodNumber>;
6
6
  defaultPriority: z.ZodDefault<z.ZodEnum<["critical", "high", "normal", "low"]>>;
7
- dmPolicy: z.ZodDefault<z.ZodEnum<["pairing", "allowlist", "open"]>>;
7
+ enabled: z.ZodDefault<z.ZodBoolean>;
8
8
  }, "strip", z.ZodTypeAny, {
9
9
  apiKey: string;
10
10
  baseUrl: string;
11
11
  pollIntervalMs: number;
12
12
  defaultPriority: "critical" | "high" | "normal" | "low";
13
- dmPolicy: "pairing" | "allowlist" | "open";
13
+ enabled: boolean;
14
14
  }, {
15
15
  apiKey: string;
16
16
  baseUrl?: string | undefined;
17
17
  pollIntervalMs?: number | undefined;
18
18
  defaultPriority?: "critical" | "high" | "normal" | "low" | undefined;
19
- dmPolicy?: "pairing" | "allowlist" | "open" | undefined;
19
+ enabled?: boolean | undefined;
20
20
  }>;
21
- export type HiloopConfig = z.infer<typeof HiloopConfigSchema>;
21
+ export type HiloopChannelConfig = z.infer<typeof HiloopChannelConfig>;
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- export const HiloopConfigSchema = z.object({
2
+ export const HiloopChannelConfig = z.object({
3
3
  apiKey: z
4
4
  .string()
5
5
  .startsWith("hlp_", "API key must start with hlp_"),
@@ -16,8 +16,6 @@ export const HiloopConfigSchema = z.object({
16
16
  defaultPriority: z
17
17
  .enum(["critical", "high", "normal", "low"])
18
18
  .default("normal"),
19
- dmPolicy: z
20
- .enum(["pairing", "allowlist", "open"])
21
- .default("pairing"),
19
+ enabled: z.boolean().default(true),
22
20
  });
23
21
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,UAAU,CAAC,MAAM,EAAE,8BAA8B,CAAC;IACrD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,OAAO,CAAC,yBAAyB,CAAC;IACrC,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,GAAG,CAAC;SACR,GAAG,CAAC,MAAM,CAAC;SACX,OAAO,CAAC,IAAI,CAAC;IAChB,eAAe,EAAE,CAAC;SACf,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC3C,OAAO,CAAC,QAAQ,CAAC;IACpB,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;SACtC,OAAO,CAAC,SAAS,CAAC;CACtB,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,UAAU,CAAC,MAAM,EAAE,8BAA8B,CAAC;IACrD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,OAAO,CAAC,yBAAyB,CAAC;IACrC,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,GAAG,CAAC;SACR,GAAG,CAAC,MAAM,CAAC;SACX,OAAO,CAAC,IAAI,CAAC;IAChB,eAAe,EAAE,CAAC;SACf,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SAC3C,OAAO,CAAC,QAAQ,CAAC;IACpB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACnC,CAAC,CAAC"}
@@ -1,12 +1,9 @@
1
1
  import { z } from "zod";
2
- import type { HiloopApiClient } from "./api-client.js";
3
- import type { HiloopConfig } from "./config.js";
4
- export interface ToolRegistrar {
5
- registerTool(def: {
6
- name: string;
7
- description: string;
8
- schema: z.ZodObject<z.ZodRawShape>;
9
- handler: (params: Record<string, unknown>) => Promise<unknown>;
10
- }): void;
2
+ import type { HiloopChannelConfig } from "./config.js";
3
+ export interface ToolDefinition {
4
+ name: string;
5
+ description: string;
6
+ parameters: z.ZodType;
7
+ execute: (params: Record<string, unknown>, ctx: unknown) => Promise<unknown>;
11
8
  }
12
- export declare function registerHiloopTools(registrar: ToolRegistrar, client: HiloopApiClient, config: HiloopConfig): void;
9
+ export declare function createTools(cfg: HiloopChannelConfig): ToolDefinition[];
package/dist/src/tools.js CHANGED
@@ -1,197 +1,166 @@
1
1
  import { z } from "zod";
2
- export function registerHiloopTools(registrar, client, config) {
3
- registrar.registerTool({
4
- name: "hiloop_request_approval",
5
- description: "Request approval from a human via Hiloop. Use when you need permission " +
6
- "to proceed with a dangerous or irreversible action.",
7
- schema: z.object({
8
- title: z.string().describe("What you need approved"),
9
- options: z
10
- .array(z.string())
11
- .default(["Approve", "Deny"])
12
- .describe("Choices for the human (default: Approve/Deny)"),
13
- priority: z
14
- .enum(["critical", "high", "normal", "low"])
15
- .default(config.defaultPriority)
16
- .describe("Priority level"),
17
- deadlineMinutes: z
18
- .number()
19
- .optional()
20
- .describe("Deadline in minutes from now"),
21
- description: z
22
- .string()
23
- .optional()
24
- .describe("Additional context for the human"),
25
- }),
26
- handler: async (params) => {
27
- const interaction = await client.createInteraction({
28
- type: "approval",
29
- encryptedTitle: params.title,
30
- encryptedDescription: params.description,
31
- encryptedOptions: JSON.stringify(params.options),
32
- priority: params.priority || config.defaultPriority,
33
- deadlineMinutes: params.deadlineMinutes,
34
- });
35
- return { interactionId: interaction.id, status: interaction.status };
2
+ import { HiloopApiClient } from "./api-client.js";
3
+ export function createTools(cfg) {
4
+ const client = new HiloopApiClient(cfg);
5
+ return [
6
+ {
7
+ name: "hiloop_request_approval",
8
+ description: "Request approval from a human via Hiloop. Use when you need permission " +
9
+ "to proceed with a dangerous or irreversible action.",
10
+ parameters: z.object({
11
+ title: z.string().describe("What you need approved"),
12
+ options: z
13
+ .array(z.string())
14
+ .default(["Approve", "Deny"])
15
+ .describe("Choices for the human"),
16
+ priority: z
17
+ .enum(["critical", "high", "normal", "low"])
18
+ .default(cfg.defaultPriority),
19
+ deadlineMinutes: z.number().optional().describe("Deadline in minutes"),
20
+ description: z.string().optional().describe("Additional context"),
21
+ }),
22
+ execute: async (params) => {
23
+ const ix = await client.createInteraction({
24
+ type: "approval",
25
+ encryptedTitle: params.title,
26
+ encryptedDescription: params.description,
27
+ encryptedOptions: JSON.stringify(params.options),
28
+ priority: params.priority,
29
+ deadlineMinutes: params.deadlineMinutes,
30
+ });
31
+ return { interactionId: ix.id, status: ix.status };
32
+ },
36
33
  },
37
- });
38
- registrar.registerTool({
39
- name: "hiloop_request_review",
40
- description: "Request a human review of content, code, or a document via Hiloop.",
41
- schema: z.object({
42
- title: z.string().describe("What needs to be reviewed"),
43
- description: z
44
- .string()
45
- .optional()
46
- .describe("Content or details to review"),
47
- priority: z
48
- .enum(["critical", "high", "normal", "low"])
49
- .default(config.defaultPriority),
50
- deadlineMinutes: z.number().optional(),
51
- }),
52
- handler: async (params) => {
53
- const interaction = await client.createInteraction({
54
- type: "review",
55
- encryptedTitle: params.title,
56
- encryptedDescription: params.description,
57
- priority: params.priority || config.defaultPriority,
58
- deadlineMinutes: params.deadlineMinutes,
59
- });
60
- return { interactionId: interaction.id, status: interaction.status };
34
+ {
35
+ name: "hiloop_request_review",
36
+ description: "Request a human review of content, code, or a document.",
37
+ parameters: z.object({
38
+ title: z.string().describe("What needs reviewing"),
39
+ description: z.string().optional().describe("Content to review"),
40
+ priority: z.enum(["critical", "high", "normal", "low"]).default(cfg.defaultPriority),
41
+ deadlineMinutes: z.number().optional(),
42
+ }),
43
+ execute: async (params) => {
44
+ const ix = await client.createInteraction({
45
+ type: "review",
46
+ encryptedTitle: params.title,
47
+ encryptedDescription: params.description,
48
+ priority: params.priority,
49
+ deadlineMinutes: params.deadlineMinutes,
50
+ });
51
+ return { interactionId: ix.id, status: ix.status };
52
+ },
61
53
  },
62
- });
63
- registrar.registerTool({
64
- name: "hiloop_request_form",
65
- description: "Send a form to a human to fill out. Useful for gathering structured data.",
66
- schema: z.object({
67
- title: z.string().describe("Form title"),
68
- formSchema: z
69
- .string()
70
- .describe("JSON schema describing the form fields"),
71
- priority: z
72
- .enum(["critical", "high", "normal", "low"])
73
- .default(config.defaultPriority),
74
- deadlineMinutes: z.number().optional(),
75
- }),
76
- handler: async (params) => {
77
- const interaction = await client.createInteraction({
78
- type: "form",
79
- encryptedTitle: params.title,
80
- encryptedFormSchema: params.formSchema,
81
- priority: params.priority || config.defaultPriority,
82
- deadlineMinutes: params.deadlineMinutes,
83
- });
84
- return { interactionId: interaction.id, status: interaction.status };
54
+ {
55
+ name: "hiloop_request_form",
56
+ description: "Send a form to a human to collect structured data.",
57
+ parameters: z.object({
58
+ title: z.string().describe("Form title"),
59
+ formSchema: z.string().describe("JSON schema for the form fields"),
60
+ priority: z.enum(["critical", "high", "normal", "low"]).default(cfg.defaultPriority),
61
+ deadlineMinutes: z.number().optional(),
62
+ }),
63
+ execute: async (params) => {
64
+ const ix = await client.createInteraction({
65
+ type: "form",
66
+ encryptedTitle: params.title,
67
+ encryptedFormSchema: params.formSchema,
68
+ priority: params.priority,
69
+ deadlineMinutes: params.deadlineMinutes,
70
+ });
71
+ return { interactionId: ix.id, status: ix.status };
72
+ },
85
73
  },
86
- });
87
- registrar.registerTool({
88
- name: "hiloop_send_notification",
89
- description: "Send a fire-and-forget notification to a human. No response expected.",
90
- schema: z.object({
91
- title: z.string().describe("Notification title"),
92
- description: z
93
- .string()
94
- .optional()
95
- .describe("Notification body"),
96
- priority: z
97
- .enum(["critical", "high", "normal", "low"])
98
- .default(config.defaultPriority),
99
- }),
100
- handler: async (params) => {
101
- const interaction = await client.createInteraction({
102
- type: "notification",
103
- encryptedTitle: params.title,
104
- encryptedDescription: params.description,
105
- priority: params.priority || config.defaultPriority,
106
- });
107
- return { interactionId: interaction.id, status: interaction.status };
74
+ {
75
+ name: "hiloop_send_notification",
76
+ description: "Send a fire-and-forget notification to a human.",
77
+ parameters: z.object({
78
+ title: z.string().describe("Notification title"),
79
+ description: z.string().optional().describe("Notification body"),
80
+ priority: z.enum(["critical", "high", "normal", "low"]).default(cfg.defaultPriority),
81
+ }),
82
+ execute: async (params) => {
83
+ const ix = await client.createInteraction({
84
+ type: "notification",
85
+ encryptedTitle: params.title,
86
+ encryptedDescription: params.description,
87
+ priority: params.priority,
88
+ });
89
+ return { interactionId: ix.id, status: ix.status };
90
+ },
108
91
  },
109
- });
110
- registrar.registerTool({
111
- name: "hiloop_start_live_session",
112
- description: "Start a live session with a human for real-time screen sharing or collaboration.",
113
- schema: z.object({
114
- title: z.string().describe("Session title"),
115
- description: z
116
- .string()
117
- .optional()
118
- .describe("What the session is about"),
119
- priority: z
120
- .enum(["critical", "high", "normal", "low"])
121
- .default(config.defaultPriority),
122
- }),
123
- handler: async (params) => {
124
- const interaction = await client.createInteraction({
125
- type: "live_session",
126
- encryptedTitle: params.title,
127
- encryptedDescription: params.description,
128
- priority: params.priority || config.defaultPriority,
129
- });
130
- return { interactionId: interaction.id, status: interaction.status };
92
+ {
93
+ name: "hiloop_start_live_session",
94
+ description: "Start a live session for real-time screen sharing or collaboration.",
95
+ parameters: z.object({
96
+ title: z.string().describe("Session title"),
97
+ description: z.string().optional(),
98
+ priority: z.enum(["critical", "high", "normal", "low"]).default(cfg.defaultPriority),
99
+ }),
100
+ execute: async (params) => {
101
+ const ix = await client.createInteraction({
102
+ type: "live_session",
103
+ encryptedTitle: params.title,
104
+ encryptedDescription: params.description,
105
+ priority: params.priority,
106
+ });
107
+ return { interactionId: ix.id, status: ix.status };
108
+ },
131
109
  },
132
- });
133
- registrar.registerTool({
134
- name: "hiloop_check_status",
135
- description: "Check the current status of a Hiloop interaction.",
136
- schema: z.object({
137
- interactionId: z.string().describe("The interaction ID to check"),
138
- }),
139
- handler: async (params) => {
140
- const interaction = await client.getInteraction(params.interactionId);
141
- return {
142
- id: interaction.id,
143
- type: interaction.type,
144
- status: interaction.status,
145
- priority: interaction.priority,
146
- respondedBy: interaction.respondedBy,
147
- respondedAt: interaction.respondedAt,
148
- encryptedResponse: interaction.encryptedResponse,
149
- };
110
+ {
111
+ name: "hiloop_check_status",
112
+ description: "Check the current status of a Hiloop interaction.",
113
+ parameters: z.object({
114
+ interactionId: z.string().describe("The interaction ID"),
115
+ }),
116
+ execute: async (params) => {
117
+ const ix = await client.getInteraction(params.interactionId);
118
+ return {
119
+ id: ix.id,
120
+ type: ix.type,
121
+ status: ix.status,
122
+ priority: ix.priority,
123
+ respondedBy: ix.respondedBy,
124
+ encryptedResponse: ix.encryptedResponse,
125
+ };
126
+ },
150
127
  },
151
- });
152
- registrar.registerTool({
153
- name: "hiloop_await_response",
154
- description: "Wait for a human to respond to a Hiloop interaction. Long-polls up to 30 seconds.",
155
- schema: z.object({
156
- interactionId: z.string().describe("The interaction ID to wait on"),
157
- timeout: z
158
- .number()
159
- .min(1)
160
- .max(30)
161
- .default(30)
162
- .describe("Timeout in seconds (max 30)"),
163
- }),
164
- handler: async (params) => {
165
- const interaction = await client.awaitResponse(params.interactionId, params.timeout);
166
- return {
167
- id: interaction.id,
168
- status: interaction.status,
169
- encryptedResponse: interaction.encryptedResponse,
170
- respondedBy: interaction.respondedBy,
171
- respondedAt: interaction.respondedAt,
172
- };
128
+ {
129
+ name: "hiloop_await_response",
130
+ description: "Wait for a human to respond to a Hiloop interaction (up to 30s).",
131
+ parameters: z.object({
132
+ interactionId: z.string().describe("The interaction ID"),
133
+ timeout: z.number().min(1).max(30).default(30).describe("Timeout in seconds"),
134
+ }),
135
+ execute: async (params) => {
136
+ const ix = await client.awaitResponse(params.interactionId, params.timeout);
137
+ return {
138
+ id: ix.id,
139
+ status: ix.status,
140
+ encryptedResponse: ix.encryptedResponse,
141
+ respondedBy: ix.respondedBy,
142
+ };
143
+ },
173
144
  },
174
- });
175
- registrar.registerTool({
176
- name: "hiloop_cancel_request",
177
- description: "Cancel a pending Hiloop interaction.",
178
- schema: z.object({
179
- interactionId: z
180
- .string()
181
- .describe("The interaction ID to cancel"),
182
- }),
183
- handler: async (params) => {
184
- const interaction = await client.cancelInteraction(params.interactionId);
185
- return { id: interaction.id, status: interaction.status };
145
+ {
146
+ name: "hiloop_cancel_request",
147
+ description: "Cancel a pending Hiloop interaction.",
148
+ parameters: z.object({
149
+ interactionId: z.string().describe("The interaction ID to cancel"),
150
+ }),
151
+ execute: async (params) => {
152
+ const ix = await client.cancelInteraction(params.interactionId);
153
+ return { id: ix.id, status: ix.status };
154
+ },
186
155
  },
187
- });
188
- registrar.registerTool({
189
- name: "hiloop_check_quota",
190
- description: "Check your Hiloop usage quota (how many interactions you can create).",
191
- schema: z.object({}),
192
- handler: async () => {
193
- return await client.checkQuota();
156
+ {
157
+ name: "hiloop_check_quota",
158
+ description: "Check your Hiloop usage quota.",
159
+ parameters: z.object({}),
160
+ execute: async () => {
161
+ return await client.checkQuota();
162
+ },
194
163
  },
195
- });
164
+ ];
196
165
  }
197
166
  //# sourceMappingURL=tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "hiloop-openclaw",
3
+ "openclaw": {
4
+ "extensions": ["./dist/index.js"],
5
+ "channel": {
6
+ "id": "hiloop",
7
+ "label": "Hiloop",
8
+ "selectionLabel": "Hiloop (Human-in-the-loop)",
9
+ "docsPath": "/channels/hiloop",
10
+ "blurb": "Human-in-the-loop: approvals, chat, reviews, forms, live sessions, voice.",
11
+ "order": 80,
12
+ "aliases": ["hi-loop"]
13
+ },
14
+ "install": {
15
+ "npmSpec": "hiloop-openclaw@^0.2.0"
16
+ }
17
+ }
18
+ }
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "hiloop-openclaw",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Hiloop channel plugin for OpenClaw - human-in-the-loop for AI agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "files": [
9
9
  "dist",
10
- "src/skill.md"
10
+ "src/skill.md",
11
+ "openclaw.plugin.json"
11
12
  ],
12
13
  "scripts": {
13
14
  "build": "tsc",
@@ -15,11 +16,17 @@
15
16
  "dev": "tsc --watch"
16
17
  },
17
18
  "openclaw": {
18
- "extensions": ["channel", "tools"],
19
+ "extensions": ["./dist/index.js"],
19
20
  "channel": {
20
21
  "id": "hiloop",
21
22
  "label": "Hiloop",
22
- "description": "Human-in-the-loop interactions: approvals, chat, reviews, forms, live sessions, voice"
23
+ "docsPath": "/channels/hiloop",
24
+ "blurb": "Human-in-the-loop: approvals, chat, reviews, forms, live sessions, voice.",
25
+ "order": 80,
26
+ "aliases": ["hi-loop"]
27
+ },
28
+ "install": {
29
+ "npmSpec": "hiloop-openclaw@^0.2.0"
23
30
  }
24
31
  },
25
32
  "repository": {
@@ -37,10 +44,7 @@
37
44
  "openclaw-channel",
38
45
  "hiloop",
39
46
  "human-in-the-loop",
40
- "ai-agents",
41
- "approval",
42
- "review",
43
- "chat"
47
+ "ai-agents"
44
48
  ],
45
49
  "license": "MIT",
46
50
  "engines": {