@hybridaione/hybridclaw 0.2.2 → 0.2.6
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/.github/workflows/ci.yml +70 -0
- package/.husky/pre-commit +1 -0
- package/CHANGELOG.md +85 -0
- package/CONTRIBUTING.md +33 -0
- package/README.md +41 -16
- package/SECURITY.md +17 -0
- package/biome.json +35 -0
- package/config.example.json +71 -8
- package/container/package-lock.json +2 -2
- package/container/package.json +1 -1
- package/container/src/approval-policy.ts +1303 -0
- package/container/src/browser-tools.ts +431 -136
- package/container/src/extensions.ts +36 -12
- package/container/src/hybridai-client.ts +34 -13
- package/container/src/index.ts +451 -109
- package/container/src/ipc.ts +5 -3
- package/container/src/token-usage.ts +20 -10
- package/container/src/tools.ts +599 -225
- package/container/src/types.ts +32 -2
- package/container/src/web-fetch.ts +89 -32
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +10 -2
- package/dist/agent.js.map +1 -1
- package/dist/audit-cli.d.ts.map +1 -1
- package/dist/audit-cli.js +4 -2
- package/dist/audit-cli.js.map +1 -1
- package/dist/audit-events.d.ts.map +1 -1
- package/dist/audit-events.js +53 -3
- package/dist/audit-events.js.map +1 -1
- package/dist/audit-trail.d.ts.map +1 -1
- package/dist/audit-trail.js +17 -8
- package/dist/audit-trail.js.map +1 -1
- package/dist/channels/discord/attachments.d.ts.map +1 -1
- package/dist/channels/discord/attachments.js +14 -7
- package/dist/channels/discord/attachments.js.map +1 -1
- package/dist/channels/discord/debounce.d.ts +9 -0
- package/dist/channels/discord/debounce.d.ts.map +1 -0
- package/dist/channels/discord/debounce.js +20 -0
- package/dist/channels/discord/debounce.js.map +1 -0
- package/dist/channels/discord/delivery.d.ts +4 -1
- package/dist/channels/discord/delivery.d.ts.map +1 -1
- package/dist/channels/discord/delivery.js +19 -3
- package/dist/channels/discord/delivery.js.map +1 -1
- package/dist/channels/discord/human-delay.d.ts +16 -0
- package/dist/channels/discord/human-delay.d.ts.map +1 -0
- package/dist/channels/discord/human-delay.js +29 -0
- package/dist/channels/discord/human-delay.js.map +1 -0
- package/dist/channels/discord/inbound.d.ts +4 -0
- package/dist/channels/discord/inbound.d.ts.map +1 -1
- package/dist/channels/discord/inbound.js +45 -4
- package/dist/channels/discord/inbound.js.map +1 -1
- package/dist/channels/discord/mentions.d.ts.map +1 -1
- package/dist/channels/discord/mentions.js +16 -4
- package/dist/channels/discord/mentions.js.map +1 -1
- package/dist/channels/discord/presence.d.ts +33 -0
- package/dist/channels/discord/presence.d.ts.map +1 -0
- package/dist/channels/discord/presence.js +111 -0
- package/dist/channels/discord/presence.js.map +1 -0
- package/dist/channels/discord/rate-limiter.d.ts +14 -0
- package/dist/channels/discord/rate-limiter.d.ts.map +1 -0
- package/dist/channels/discord/rate-limiter.js +49 -0
- package/dist/channels/discord/rate-limiter.js.map +1 -0
- package/dist/channels/discord/reactions.d.ts +38 -0
- package/dist/channels/discord/reactions.d.ts.map +1 -0
- package/dist/channels/discord/reactions.js +151 -0
- package/dist/channels/discord/reactions.js.map +1 -0
- package/dist/channels/discord/runtime.d.ts +6 -3
- package/dist/channels/discord/runtime.d.ts.map +1 -1
- package/dist/channels/discord/runtime.js +621 -125
- package/dist/channels/discord/runtime.js.map +1 -1
- package/dist/channels/discord/stream.d.ts +4 -1
- package/dist/channels/discord/stream.d.ts.map +1 -1
- package/dist/channels/discord/stream.js +16 -8
- package/dist/channels/discord/stream.js.map +1 -1
- package/dist/channels/discord/tool-actions.d.ts.map +1 -1
- package/dist/channels/discord/tool-actions.js +24 -12
- package/dist/channels/discord/tool-actions.js.map +1 -1
- package/dist/channels/discord/typing.d.ts +15 -0
- package/dist/channels/discord/typing.d.ts.map +1 -0
- package/dist/channels/discord/typing.js +106 -0
- package/dist/channels/discord/typing.js.map +1 -0
- package/dist/chunk.d.ts.map +1 -1
- package/dist/chunk.js +4 -2
- package/dist/chunk.js.map +1 -1
- package/dist/cli.js +47 -22
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +103 -18
- package/dist/config.js.map +1 -1
- package/dist/container-runner.d.ts.map +1 -1
- package/dist/container-runner.js +58 -26
- package/dist/container-runner.js.map +1 -1
- package/dist/container-setup.d.ts.map +1 -1
- package/dist/container-setup.js +10 -9
- package/dist/container-setup.js.map +1 -1
- package/dist/conversation.d.ts +2 -2
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +1 -1
- package/dist/conversation.js.map +1 -1
- package/dist/db.d.ts +118 -2
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +1568 -50
- package/dist/db.js.map +1 -1
- package/dist/delegation-manager.d.ts.map +1 -1
- package/dist/delegation-manager.js +3 -2
- package/dist/delegation-manager.js.map +1 -1
- package/dist/gateway-client.d.ts +2 -2
- package/dist/gateway-client.d.ts.map +1 -1
- package/dist/gateway-client.js +10 -4
- package/dist/gateway-client.js.map +1 -1
- package/dist/gateway-service.d.ts +3 -3
- package/dist/gateway-service.d.ts.map +1 -1
- package/dist/gateway-service.js +563 -73
- package/dist/gateway-service.js.map +1 -1
- package/dist/gateway-types.d.ts +24 -0
- package/dist/gateway-types.d.ts.map +1 -1
- package/dist/gateway-types.js.map +1 -1
- package/dist/gateway.js +179 -24
- package/dist/gateway.js.map +1 -1
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +20 -10
- package/dist/health.js.map +1 -1
- package/dist/heartbeat.d.ts +4 -0
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +48 -20
- package/dist/heartbeat.js.map +1 -1
- package/dist/hybridai-bots.d.ts.map +1 -1
- package/dist/hybridai-bots.js +4 -2
- package/dist/hybridai-bots.js.map +1 -1
- package/dist/instruction-approval-audit.d.ts.map +1 -1
- package/dist/instruction-approval-audit.js.map +1 -1
- package/dist/instruction-integrity.d.ts.map +1 -1
- package/dist/instruction-integrity.js +8 -2
- package/dist/instruction-integrity.js.map +1 -1
- package/dist/ipc.d.ts.map +1 -1
- package/dist/ipc.js +6 -1
- package/dist/ipc.js.map +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/memory-consolidation.d.ts +17 -0
- package/dist/memory-consolidation.d.ts.map +1 -0
- package/dist/memory-consolidation.js +25 -0
- package/dist/memory-consolidation.js.map +1 -0
- package/dist/memory-service.d.ts +200 -0
- package/dist/memory-service.d.ts.map +1 -0
- package/dist/memory-service.js +294 -0
- package/dist/memory-service.js.map +1 -0
- package/dist/mount-security.d.ts.map +1 -1
- package/dist/mount-security.js +31 -7
- package/dist/mount-security.js.map +1 -1
- package/dist/observability-ingest.d.ts.map +1 -1
- package/dist/observability-ingest.js +32 -11
- package/dist/observability-ingest.js.map +1 -1
- package/dist/onboarding.d.ts.map +1 -1
- package/dist/onboarding.js +32 -9
- package/dist/onboarding.js.map +1 -1
- package/dist/proactive-policy.d.ts.map +1 -1
- package/dist/proactive-policy.js +2 -1
- package/dist/proactive-policy.js.map +1 -1
- package/dist/prompt-hooks.d.ts.map +1 -1
- package/dist/prompt-hooks.js +9 -7
- package/dist/prompt-hooks.js.map +1 -1
- package/dist/runtime-config.d.ts +98 -1
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +477 -23
- package/dist/runtime-config.js.map +1 -1
- package/dist/scheduled-task-runner.d.ts +1 -0
- package/dist/scheduled-task-runner.d.ts.map +1 -1
- package/dist/scheduled-task-runner.js +29 -10
- package/dist/scheduled-task-runner.js.map +1 -1
- package/dist/scheduler.d.ts +43 -4
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +530 -56
- package/dist/scheduler.js.map +1 -1
- package/dist/session-export.d.ts +26 -0
- package/dist/session-export.d.ts.map +1 -0
- package/dist/session-export.js +149 -0
- package/dist/session-export.js.map +1 -0
- package/dist/session-maintenance.d.ts.map +1 -1
- package/dist/session-maintenance.js +75 -13
- package/dist/session-maintenance.js.map +1 -1
- package/dist/session-transcripts.d.ts.map +1 -1
- package/dist/session-transcripts.js.map +1 -1
- package/dist/side-effects.d.ts.map +1 -1
- package/dist/side-effects.js +14 -2
- package/dist/side-effects.js.map +1 -1
- package/dist/skills-guard.d.ts.map +1 -1
- package/dist/skills-guard.js +893 -130
- package/dist/skills-guard.js.map +1 -1
- package/dist/skills.d.ts +5 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +29 -15
- package/dist/skills.js.map +1 -1
- package/dist/token-efficiency.d.ts.map +1 -1
- package/dist/token-efficiency.js.map +1 -1
- package/dist/tui.js +92 -11
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +146 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +24 -1
- package/dist/types.js.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +42 -14
- package/dist/update.js.map +1 -1
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +49 -9
- package/dist/workspace.js.map +1 -1
- package/docs/chat.html +9 -3
- package/docs/index.html +37 -13
- package/package.json +8 -2
- package/src/agent.ts +16 -3
- package/src/audit-cli.ts +44 -16
- package/src/audit-events.ts +69 -5
- package/src/audit-trail.ts +41 -15
- package/src/channels/discord/attachments.ts +81 -27
- package/src/channels/discord/debounce.ts +25 -0
- package/src/channels/discord/delivery.ts +57 -13
- package/src/channels/discord/human-delay.ts +48 -0
- package/src/channels/discord/inbound.ts +66 -7
- package/src/channels/discord/mentions.ts +42 -18
- package/src/channels/discord/presence.ts +148 -0
- package/src/channels/discord/rate-limiter.ts +58 -0
- package/src/channels/discord/reactions.ts +211 -0
- package/src/channels/discord/runtime.ts +1048 -182
- package/src/channels/discord/stream.ts +73 -27
- package/src/channels/discord/tool-actions.ts +78 -37
- package/src/channels/discord/typing.ts +140 -0
- package/src/chunk.ts +12 -4
- package/src/cli.ts +141 -56
- package/src/config.ts +192 -34
- package/src/container-runner.ts +132 -42
- package/src/container-setup.ts +57 -22
- package/src/conversation.ts +9 -7
- package/src/db.ts +2217 -84
- package/src/delegation-manager.ts +6 -2
- package/src/gateway-client.ts +41 -17
- package/src/gateway-service.ts +1019 -201
- package/src/gateway-types.ts +33 -0
- package/src/gateway.ts +321 -48
- package/src/health.ts +66 -26
- package/src/heartbeat.ts +84 -22
- package/src/hybridai-bots.ts +14 -5
- package/src/instruction-approval-audit.ts +4 -1
- package/src/instruction-integrity.ts +30 -9
- package/src/ipc.ts +23 -5
- package/src/logger.ts +4 -1
- package/src/memory-consolidation.ts +41 -0
- package/src/memory-service.ts +606 -0
- package/src/mount-security.ts +58 -13
- package/src/observability-ingest.ts +134 -35
- package/src/onboarding.ts +126 -35
- package/src/proactive-policy.ts +3 -1
- package/src/prompt-hooks.ts +40 -17
- package/src/runtime-config.ts +1114 -99
- package/src/scheduled-task-runner.ts +63 -11
- package/src/scheduler.ts +683 -60
- package/src/session-export.ts +196 -0
- package/src/session-maintenance.ts +125 -22
- package/src/session-transcripts.ts +12 -3
- package/src/side-effects.ts +28 -5
- package/src/skills-guard.ts +1067 -219
- package/src/skills.ts +163 -65
- package/src/token-efficiency.ts +31 -9
- package/src/tui.ts +166 -25
- package/src/types.ts +195 -2
- package/src/update.ts +79 -23
- package/src/workspace.ts +63 -11
- package/tests/approval-policy.test.ts +224 -0
- package/tests/discord.basic.test.ts +82 -2
- package/tests/discord.human-presence.test.ts +85 -0
- package/tests/gateway-service.media-routing.test.ts +8 -2
- package/tests/memory-service.test.ts +1114 -0
- package/tests/token-efficiency.basic.test.ts +8 -2
- package/vitest.e2e.config.ts +3 -1
- package/vitest.integration.config.ts +3 -1
- package/vitest.live.config.ts +3 -1
- package/vitest.unit.config.ts +9 -0
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
PROACTIVE_DELEGATION_ENABLED,
|
|
3
|
+
PROACTIVE_DELEGATION_MAX_CONCURRENT,
|
|
4
|
+
} from './config.js';
|
|
2
5
|
import { logger } from './logger.js';
|
|
3
6
|
|
|
4
7
|
interface DelegationJob {
|
|
@@ -20,7 +23,8 @@ function pump(): void {
|
|
|
20
23
|
const job = dequeue();
|
|
21
24
|
if (!job) return;
|
|
22
25
|
activeCount += 1;
|
|
23
|
-
void job
|
|
26
|
+
void job
|
|
27
|
+
.run()
|
|
24
28
|
.catch((err) => {
|
|
25
29
|
logger.error({ err, jobId: job.id }, 'Delegation job failed');
|
|
26
30
|
})
|
package/src/gateway-client.ts
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { GATEWAY_API_TOKEN, GATEWAY_BASE_URL } from './config.js';
|
|
2
2
|
import {
|
|
3
|
-
renderGatewayCommand,
|
|
4
3
|
type GatewayChatRequestBody,
|
|
5
4
|
type GatewayChatResult,
|
|
6
|
-
type GatewayCommandRequest,
|
|
7
|
-
type GatewayCommandResult,
|
|
8
5
|
type GatewayChatStreamEvent,
|
|
9
6
|
type GatewayChatStreamResultEvent,
|
|
10
7
|
type GatewayChatTextDeltaEvent,
|
|
11
8
|
type GatewayChatToolProgressEvent,
|
|
9
|
+
type GatewayCommandRequest,
|
|
10
|
+
type GatewayCommandResult,
|
|
12
11
|
type GatewayStatus,
|
|
12
|
+
renderGatewayCommand,
|
|
13
13
|
} from './gateway-types.js';
|
|
14
14
|
export { renderGatewayCommand };
|
|
15
|
-
export type {
|
|
15
|
+
export type {
|
|
16
|
+
GatewayChatResult,
|
|
17
|
+
GatewayCommandResult,
|
|
18
|
+
GatewayStatus,
|
|
19
|
+
GatewayChatStreamEvent,
|
|
20
|
+
};
|
|
16
21
|
export type GatewayChatRequest = GatewayChatRequestBody;
|
|
17
22
|
|
|
18
23
|
function gatewayUrl(pathname: string): string {
|
|
@@ -37,13 +42,18 @@ async function requestJson<T>(pathname: string, init: RequestInit): Promise<T> {
|
|
|
37
42
|
|
|
38
43
|
const payload = await response.json().catch(() => ({}));
|
|
39
44
|
if (!response.ok) {
|
|
40
|
-
const message =
|
|
45
|
+
const message =
|
|
46
|
+
typeof payload.error === 'string'
|
|
47
|
+
? payload.error
|
|
48
|
+
: `${response.status} ${response.statusText}`;
|
|
41
49
|
throw new Error(`Gateway error: ${message}`);
|
|
42
50
|
}
|
|
43
51
|
return payload as T;
|
|
44
52
|
}
|
|
45
53
|
|
|
46
|
-
export async function gatewayCommand(
|
|
54
|
+
export async function gatewayCommand(
|
|
55
|
+
params: GatewayCommandRequest,
|
|
56
|
+
): Promise<GatewayCommandResult> {
|
|
47
57
|
return requestJson<GatewayCommandResult>('/api/command', {
|
|
48
58
|
method: 'POST',
|
|
49
59
|
headers: {
|
|
@@ -86,13 +96,17 @@ export async function gatewayChatStream(
|
|
|
86
96
|
});
|
|
87
97
|
|
|
88
98
|
if (!response.ok) {
|
|
89
|
-
const errorText =
|
|
99
|
+
const errorText =
|
|
100
|
+
(await response.text().catch(() => '')).trim() ||
|
|
101
|
+
`${response.status} ${response.statusText}`;
|
|
90
102
|
throw new Error(`Gateway error: ${errorText}`);
|
|
91
103
|
}
|
|
92
104
|
|
|
93
105
|
const parser = createResponseParser(onEvent);
|
|
94
106
|
if (!response.body) {
|
|
95
|
-
const text =
|
|
107
|
+
const text =
|
|
108
|
+
(await response.text().catch(() => '')).trim() ||
|
|
109
|
+
`${response.status} ${response.statusText}`;
|
|
96
110
|
const parsed = parser(text);
|
|
97
111
|
if (!parsed || parsed.type !== 'result') {
|
|
98
112
|
throw new Error(`Malformed gateway response: ${text}`);
|
|
@@ -136,9 +150,9 @@ export async function gatewayChatStream(
|
|
|
136
150
|
throw new Error('Gateway stream ended without a result payload.');
|
|
137
151
|
}
|
|
138
152
|
|
|
139
|
-
function createResponseParser(
|
|
140
|
-
|
|
141
|
-
) => GatewayChatStreamEvent | null {
|
|
153
|
+
function createResponseParser(
|
|
154
|
+
onEvent: (event: GatewayChatStreamEvent) => void,
|
|
155
|
+
): (line: string) => GatewayChatStreamEvent | null {
|
|
142
156
|
return (line: string) => {
|
|
143
157
|
const trimmed = line.trim();
|
|
144
158
|
if (!trimmed) return null;
|
|
@@ -182,7 +196,11 @@ function createResponseParser(onEvent: (event: GatewayChatStreamEvent) => void):
|
|
|
182
196
|
};
|
|
183
197
|
}
|
|
184
198
|
|
|
185
|
-
if (
|
|
199
|
+
if (
|
|
200
|
+
parsed.type === 'tool' &&
|
|
201
|
+
parsed.toolName &&
|
|
202
|
+
(parsed.phase === 'start' || parsed.phase === 'finish')
|
|
203
|
+
) {
|
|
186
204
|
const toolEvent = parsed as GatewayChatToolProgressEvent;
|
|
187
205
|
onEvent(toolEvent);
|
|
188
206
|
return null;
|
|
@@ -209,9 +227,15 @@ export async function gatewayHealth(): Promise<GatewayStatus> {
|
|
|
209
227
|
return requestJson<GatewayStatus>('/health', { method: 'GET' });
|
|
210
228
|
}
|
|
211
229
|
|
|
212
|
-
export async function gatewayShutdown(): Promise<{
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
230
|
+
export async function gatewayShutdown(): Promise<{
|
|
231
|
+
status: string;
|
|
232
|
+
message?: string;
|
|
233
|
+
}> {
|
|
234
|
+
return requestJson<{ status: string; message?: string }>(
|
|
235
|
+
'/api/admin/shutdown',
|
|
236
|
+
{
|
|
237
|
+
method: 'POST',
|
|
238
|
+
headers: authHeaders(),
|
|
239
|
+
},
|
|
240
|
+
);
|
|
217
241
|
}
|