@vaultysclaw/agent-runtime 0.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/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/base-agent.d.ts +182 -0
- package/dist/base-agent.d.ts.map +1 -0
- package/dist/base-agent.js +1003 -0
- package/dist/base-agent.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/intent-verify.d.ts +30 -0
- package/dist/intent-verify.d.ts.map +1 -0
- package/dist/intent-verify.js +55 -0
- package/dist/intent-verify.js.map +1 -0
- package/dist/peer-grant-verify.d.ts +16 -0
- package/dist/peer-grant-verify.d.ts.map +1 -0
- package/dist/peer-grant-verify.js +39 -0
- package/dist/peer-grant-verify.js.map +1 -0
- package/dist/peer-manager.d.ts +63 -0
- package/dist/peer-manager.d.ts.map +1 -0
- package/dist/peer-manager.js +448 -0
- package/dist/peer-manager.js.map +1 -0
- package/package.json +42 -0
- package/src/base-agent.ts +1332 -0
- package/src/config.ts +13 -0
- package/src/index.ts +8 -0
- package/src/intent-verify.ts +72 -0
- package/src/peer-grant-verify.ts +58 -0
- package/src/peer-manager.ts +696 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 François-Xavier Thoorens
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# @vaultysclaw/agent-runtime
|
|
2
|
+
|
|
3
|
+
Generic agent protocol runtime: the transport, authentication, and intent-routing
|
|
4
|
+
layer that lets a process connect to a VaultysClaw control plane as an agent. It is
|
|
5
|
+
deliberately framework-agnostic so it can be embedded in different hosts (the
|
|
6
|
+
full agent controller, the MCP gateway, custom integrations).
|
|
7
|
+
|
|
8
|
+
## Responsibilities
|
|
9
|
+
|
|
10
|
+
- **Connection** — WebSocket / WebRTC (PeerJS) transport to the control plane.
|
|
11
|
+
- **Authentication** — VaultysId challenge/response handshake.
|
|
12
|
+
- **Intent routing** — receive `intent` messages, dispatch to a handler, send
|
|
13
|
+
`result` messages back.
|
|
14
|
+
- **Protocol framing** — msgpack encoding of the shared channel envelope.
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
Consumed as a workspace library (ESM):
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { /* runtime APIs */ } from "@vaultysclaw/agent-runtime";
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
See `packages/mcp-gateway` for a minimal embedding example and
|
|
25
|
+
`packages/agent-controller` for the full-featured host.
|
|
26
|
+
|
|
27
|
+
## Scripts
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pnpm build # compile to dist/ with tsc
|
|
31
|
+
pnpm type-check
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Related
|
|
35
|
+
|
|
36
|
+
- [`@vaultysclaw/shared`](../shared) — message types this runtime speaks
|
|
37
|
+
- [`@vaultysclaw/agent-controller`](../agent-controller) — full agent host built on top
|
|
38
|
+
- [`@vaultysclaw/mcp-gateway`](../mcp-gateway) — MCP server built on top
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BaseAgentRuntime — abstract protocol layer for VaultysClaw agents.
|
|
3
|
+
*
|
|
4
|
+
* Handles WebSocket/WebRTC connection, VaultysId auth handshake, intent
|
|
5
|
+
* routing, policy enforcement, peer catalog management, and delegation
|
|
6
|
+
* verification. Subclasses implement `executeIntent` and `executeChat`
|
|
7
|
+
* to add LLM/tool execution on top.
|
|
8
|
+
*
|
|
9
|
+
* Emitted events (same contract as the original Agent class):
|
|
10
|
+
* status_changed { status: AgentStatus }
|
|
11
|
+
* log { level: 'info'|'warn'|'error'|'debug', message: string, data?: unknown }
|
|
12
|
+
* heartbeat { uptime: number }
|
|
13
|
+
* intent_received { intentId: string; action: string; params: Record<string, unknown> }
|
|
14
|
+
* intent_result { intentId: string; status: 'success'|'failed'; output?: unknown; error?: string }
|
|
15
|
+
* config_updated { source: 'remote'|'env'; provider?: string; model?: string }
|
|
16
|
+
*/
|
|
17
|
+
import EventEmitter from "events";
|
|
18
|
+
import { WebSocket } from "ws";
|
|
19
|
+
import { VaultysId } from "@vaultys/id";
|
|
20
|
+
import { type WSMessage, type WSAuthCompletePayload, type WSDelegationUpdatePayload, type WSLlmConfigPayload, type ExecutionResult, type AgentCapability, type AgentPeerGrant, type WSSkillsConfigPayload, type ResourceLimits, type ChatMessageEntry } from "@vaultysclaw/shared";
|
|
21
|
+
type ChatErrorCode = "llm_unavailable" | "llm_error" | "agent_offline";
|
|
22
|
+
import { type AgentRuntimeConfig } from "./config.js";
|
|
23
|
+
import { PeerManager } from "./peer-manager.js";
|
|
24
|
+
export type AgentStatus = "initializing" | "connecting" | "pending_approval" | "connected" | "disconnected";
|
|
25
|
+
export interface LogEntry {
|
|
26
|
+
ts: string;
|
|
27
|
+
level: "info" | "warn" | "error" | "debug";
|
|
28
|
+
message: string;
|
|
29
|
+
data?: unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface IntentEntry {
|
|
32
|
+
intentId: string;
|
|
33
|
+
action: string;
|
|
34
|
+
params: Record<string, unknown>;
|
|
35
|
+
status: "pending" | "success" | "failed";
|
|
36
|
+
output?: unknown;
|
|
37
|
+
error?: string;
|
|
38
|
+
receivedAt: string;
|
|
39
|
+
completedAt?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface AgentInfo {
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
version: string;
|
|
45
|
+
status: AgentStatus;
|
|
46
|
+
capabilities: AgentCapability[];
|
|
47
|
+
uptime: number;
|
|
48
|
+
lastHeartbeat: string | null;
|
|
49
|
+
recentLogs: LogEntry[];
|
|
50
|
+
recentIntents: IntentEntry[];
|
|
51
|
+
}
|
|
52
|
+
declare class RingBuffer<T> {
|
|
53
|
+
private readonly max;
|
|
54
|
+
private buf;
|
|
55
|
+
constructor(max: number);
|
|
56
|
+
push(item: T): void;
|
|
57
|
+
toArray(): T[];
|
|
58
|
+
}
|
|
59
|
+
export declare abstract class BaseAgentRuntime extends EventEmitter {
|
|
60
|
+
protected config: AgentRuntimeConfig;
|
|
61
|
+
protected vaultysId: VaultysId | null;
|
|
62
|
+
protected ws: WebSocket | null;
|
|
63
|
+
/** Active PeerJS DataConnection (when connecting via WebRTC instead of WebSocket). */
|
|
64
|
+
protected peerjsConn: import("peerjs").DataConnection | null;
|
|
65
|
+
/** Underlying PeerJS Peer instance (kept for cleanup on reconnect). */
|
|
66
|
+
private peerjsPeer;
|
|
67
|
+
private heartbeatTimer;
|
|
68
|
+
private reconnectTimer;
|
|
69
|
+
protected stopped: boolean;
|
|
70
|
+
/** Consecutive failed connection attempts — drives exponential backoff. */
|
|
71
|
+
private reconnectAttempts;
|
|
72
|
+
protected _status: AgentStatus;
|
|
73
|
+
protected id: string;
|
|
74
|
+
protected capabilities: AgentCapability[];
|
|
75
|
+
private startedAt;
|
|
76
|
+
protected lastHeartbeat: Date | null;
|
|
77
|
+
private authChallenger;
|
|
78
|
+
private authSessionId;
|
|
79
|
+
private reAuthPending;
|
|
80
|
+
protected serverPublicKey: Buffer | null;
|
|
81
|
+
protected peerManager: PeerManager | null;
|
|
82
|
+
protected peerCatalog: AgentPeerGrant[];
|
|
83
|
+
protected _peerListenerStarted: boolean;
|
|
84
|
+
protected logBuffer: RingBuffer<LogEntry>;
|
|
85
|
+
protected intentBuffer: RingBuffer<IntentEntry>;
|
|
86
|
+
protected _tokenUsageSinceLastSync: {
|
|
87
|
+
promptTokens: number;
|
|
88
|
+
completionTokens: number;
|
|
89
|
+
};
|
|
90
|
+
protected _tokenUsageTotal: {
|
|
91
|
+
promptTokens: number;
|
|
92
|
+
completionTokens: number;
|
|
93
|
+
};
|
|
94
|
+
protected resourceLimits: ResourceLimits | null;
|
|
95
|
+
protected policyId: string | null;
|
|
96
|
+
protected policyExpiresAt: string | null;
|
|
97
|
+
/** Rolling hourly request counter for maxRequestsPerHour enforcement. */
|
|
98
|
+
protected _requestsThisHour: {
|
|
99
|
+
count: number;
|
|
100
|
+
hourStart: number;
|
|
101
|
+
};
|
|
102
|
+
constructor(config: AgentRuntimeConfig);
|
|
103
|
+
abstract executeIntent(action: string, params: Record<string, unknown>, callerDid?: string, intentId?: string): Promise<unknown>;
|
|
104
|
+
abstract executeChat(messages: ChatMessageEntry[], conversationId: string, sendChunk: (chunk: string, done?: boolean, isError?: boolean, errorCode?: ChatErrorCode) => void): Promise<void>;
|
|
105
|
+
protected getDailyTokenUsageForBudget(): {
|
|
106
|
+
promptTokens: number;
|
|
107
|
+
completionTokens: number;
|
|
108
|
+
};
|
|
109
|
+
protected onAuthComplete(_payload: WSAuthCompletePayload): Promise<void>;
|
|
110
|
+
protected onDelegationUpdate(_payload: WSDelegationUpdatePayload): Promise<void>;
|
|
111
|
+
protected onPeerCatalogUpdated(_grants: AgentPeerGrant[]): Promise<void>;
|
|
112
|
+
protected onLlmConfig(_config: WSLlmConfigPayload): Promise<void>;
|
|
113
|
+
protected onSkillsConfig(_payload: WSSkillsConfigPayload): Promise<void>;
|
|
114
|
+
protected onKnowledgeSources(_sources: unknown[]): Promise<void>;
|
|
115
|
+
protected handleGetChatSessions(_msg: WSMessage): Promise<void>;
|
|
116
|
+
protected handleGetChatHistory(_msg: WSMessage): Promise<void>;
|
|
117
|
+
protected handleToolApprovalResponse(_msg: WSMessage): Promise<void>;
|
|
118
|
+
protected handleTaskEnqueue(_msg: WSMessage): Promise<void>;
|
|
119
|
+
protected handleScheduleUpdate(_msg: WSMessage): Promise<void>;
|
|
120
|
+
protected handleScheduleDelete(_msg: WSMessage): Promise<void>;
|
|
121
|
+
protected handleKnowledgeSync(_msg: WSMessage): Promise<void>;
|
|
122
|
+
start(): Promise<void>;
|
|
123
|
+
stop(): void;
|
|
124
|
+
getInfo(): AgentInfo;
|
|
125
|
+
/**
|
|
126
|
+
* Returns the agent's DID (stable identifier derived from its VaultysId).
|
|
127
|
+
* Falls back to the control-plane-assigned id if VaultysId is not yet loaded.
|
|
128
|
+
*/
|
|
129
|
+
getDid(): string;
|
|
130
|
+
getStatus(): AgentStatus;
|
|
131
|
+
/** Returns the current peer catalog (agents this agent has grants to talk to). */
|
|
132
|
+
getPeerCatalog(): AgentPeerGrant[];
|
|
133
|
+
/**
|
|
134
|
+
* Invoke a peer agent via WebRTC.
|
|
135
|
+
* Throws if the peer manager is not ready or the target is not in the catalog.
|
|
136
|
+
*/
|
|
137
|
+
invokePeer(targetDid: string, action: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
138
|
+
getRecentLogs(limit?: number): LogEntry[];
|
|
139
|
+
getRecentIntents(limit?: number): IntentEntry[];
|
|
140
|
+
protected setStatus(s: AgentStatus): void;
|
|
141
|
+
protected log(level: LogEntry["level"], message: string, data?: unknown): void;
|
|
142
|
+
protected initVaultysId(identityPath: string): Promise<VaultysId>;
|
|
143
|
+
protected connect(): void;
|
|
144
|
+
/**
|
|
145
|
+
* Schedule a reconnect attempt with exponential backoff + ±20 % jitter.
|
|
146
|
+
* Delay starts at 2 s and doubles each attempt, capped at 60 s.
|
|
147
|
+
* Resets to 0 after a successful authentication.
|
|
148
|
+
*/
|
|
149
|
+
private scheduleReconnect;
|
|
150
|
+
private resetReconnectBackoff;
|
|
151
|
+
private connectViaPeerjs;
|
|
152
|
+
private connectViaWs;
|
|
153
|
+
protected send(message: WSMessage): void;
|
|
154
|
+
protected sendHeartbeat(): void;
|
|
155
|
+
protected sendResult(intentId: string, result: ExecutionResult): void;
|
|
156
|
+
protected sendAck(messageId: string, success: boolean, reason?: string): void;
|
|
157
|
+
protected handleMessage(data: string): void;
|
|
158
|
+
private handleAuthChallenge;
|
|
159
|
+
private startAuthHandshake;
|
|
160
|
+
private handleAuthComplete;
|
|
161
|
+
private handleAuthFailed;
|
|
162
|
+
private handleRegistrationPending;
|
|
163
|
+
private handleRegistrationApproved;
|
|
164
|
+
private handleRegistrationRejected;
|
|
165
|
+
private handleUpdateCapabilities;
|
|
166
|
+
private handleIntent;
|
|
167
|
+
private handleChatMessageProtocol;
|
|
168
|
+
private handleDelegationUpdateMsg;
|
|
169
|
+
private handleAgentPeerCatalog;
|
|
170
|
+
/**
|
|
171
|
+
* Verify an intent message's ECDSA signature produced by the control plane.
|
|
172
|
+
*/
|
|
173
|
+
private verifyIntentSignature;
|
|
174
|
+
protected verifyUserDelegation(userDid: string, capability: string): Promise<boolean>;
|
|
175
|
+
/**
|
|
176
|
+
* @deprecated The `policy_update` message is superseded by the cert-reissue path.
|
|
177
|
+
*/
|
|
178
|
+
private handlePolicyUpdate;
|
|
179
|
+
protected getPeerjsServerUrl(): string | null;
|
|
180
|
+
}
|
|
181
|
+
export {};
|
|
182
|
+
//# sourceMappingURL=base-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../src/base-agent.ts"],"names":[],"mappings":"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"}
|