@gholl-studio/pier-connector 0.6.3 → 0.6.5
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/cli.d.ts +6 -0
- package/dist/cli.js +22 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/inbound.d.ts +7 -0
- package/dist/inbound.js +154 -0
- package/dist/inbound.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +644 -0
- package/dist/index.js.map +1 -0
- package/dist/job-handler.d.ts +20 -0
- package/dist/job-handler.js +62 -0
- package/dist/job-handler.js.map +1 -0
- package/dist/robot.d.ts +54 -0
- package/dist/robot.js +599 -0
- package/dist/robot.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +5 -5
- package/src/index.ts +3 -1
- package/src/robot.ts +19 -1
package/dist/robot.js
ADDED
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file robot.ts
|
|
3
|
+
* @description Implements the PierRobot class, managing NATS connectivity, heartbeat, and job lifecycle.
|
|
4
|
+
*/
|
|
5
|
+
import { PierClient, protocol, PierCrypto } from '@gholl-studio/pier-sdk';
|
|
6
|
+
const { createRequestPayload, createResultPayload, createErrorPayload, normalizeInboundPayload } = protocol;
|
|
7
|
+
import { truncate } from './job-handler.js';
|
|
8
|
+
import { jetstream, jetstreamManager, AckPolicy, DeliverPolicy } from '@nats-io/jetstream';
|
|
9
|
+
import { ethers } from 'ethers';
|
|
10
|
+
export class PierRobot {
|
|
11
|
+
config;
|
|
12
|
+
accountId;
|
|
13
|
+
client;
|
|
14
|
+
nc = null;
|
|
15
|
+
js = null;
|
|
16
|
+
jsm = null;
|
|
17
|
+
activeNodeJobs = new Map();
|
|
18
|
+
jobSubscriptions = new Map();
|
|
19
|
+
groupRingBuffer = new Map();
|
|
20
|
+
// Anti-replay nonce cache: stores "senderId:nonce" -> expiry timestamp (5 min TTL)
|
|
21
|
+
nonceCache = new Map();
|
|
22
|
+
nonceKv = null;
|
|
23
|
+
discoverySubscriptions = [];
|
|
24
|
+
isBusy = false;
|
|
25
|
+
connectionStatus = 'disconnected';
|
|
26
|
+
stats = { received: 0, completed: 0, failed: 0 };
|
|
27
|
+
runtime;
|
|
28
|
+
logger;
|
|
29
|
+
heartbeatTimer = null;
|
|
30
|
+
onInbound;
|
|
31
|
+
constructor(config, runtime, onInbound) {
|
|
32
|
+
this.config = config;
|
|
33
|
+
this.accountId = config.accountId;
|
|
34
|
+
this.runtime = runtime;
|
|
35
|
+
this.onInbound = onInbound;
|
|
36
|
+
// Robust logger wrapper
|
|
37
|
+
if (runtime.log && typeof runtime.log === 'object' && 'error' in runtime.log) {
|
|
38
|
+
this.logger = runtime.log;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.logger = {
|
|
42
|
+
info: (msg) => (typeof runtime.log === 'function' ? runtime.log(msg) : console.log(msg)),
|
|
43
|
+
error: (msg) => (typeof runtime.error === 'function' ? runtime.error(msg) : console.error(msg)),
|
|
44
|
+
warn: (msg) => (typeof runtime.warn === 'function' ? runtime.warn(msg) : console.warn(msg)),
|
|
45
|
+
debug: (msg) => (typeof runtime.debug === 'function' ? runtime.debug(msg) : console.debug ? console.debug(msg) : console.log(msg)),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
this.client = new PierClient({
|
|
49
|
+
apiUrl: config.pierApiUrl,
|
|
50
|
+
natsUrl: config.natsUrl,
|
|
51
|
+
logger: this.logger
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async heartbeat() {
|
|
55
|
+
if (!this.config.nodeId || !this.config.secretKey)
|
|
56
|
+
return null;
|
|
57
|
+
try {
|
|
58
|
+
const data = await this.client.heartbeat(this.config.nodeId, this.config.secretKey, this.config.capabilities);
|
|
59
|
+
// Phase 2: Decentralized KV Keep-Alive (PSP 1.0 — signed heartbeat)
|
|
60
|
+
try {
|
|
61
|
+
const kv = await this.client.nats.getWorkspaceKV('active_nodes');
|
|
62
|
+
let heartbeatPayload = {
|
|
63
|
+
version: 'psp-1.0',
|
|
64
|
+
id: `hb_${this.config.nodeId}_${Date.now()}`,
|
|
65
|
+
namespace: 'default',
|
|
66
|
+
timestamp: Date.now(),
|
|
67
|
+
senderId: this.accountId,
|
|
68
|
+
// --- node fields ---
|
|
69
|
+
nodeId: this.config.nodeId,
|
|
70
|
+
accountId: this.accountId,
|
|
71
|
+
capabilities: this.config.capabilities,
|
|
72
|
+
};
|
|
73
|
+
if (this.config.privateKey) {
|
|
74
|
+
heartbeatPayload.publicKey = new ethers.Wallet(this.config.privateKey).address;
|
|
75
|
+
heartbeatPayload = await PierCrypto.signSwarmMessage(heartbeatPayload, this.config.privateKey);
|
|
76
|
+
}
|
|
77
|
+
await kv.put(`node_${this.config.nodeId}`, new TextEncoder().encode(JSON.stringify(heartbeatPayload)));
|
|
78
|
+
}
|
|
79
|
+
catch (kvErr) {
|
|
80
|
+
this.logger.debug(`[pier-connector][${this.accountId}] Decentralized KV Keep-Alive failed: ${kvErr.message}`);
|
|
81
|
+
}
|
|
82
|
+
return data.nats_config || null;
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
this.logger.warn(`[pier-connector][${this.accountId}] Heartbeat failed: ${err.message}`);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async claimJob(jobId) {
|
|
90
|
+
return await this.client.claimJob(jobId, this.config.nodeId, this.config.secretKey);
|
|
91
|
+
}
|
|
92
|
+
async subscribeToJobMessages(jobId) {
|
|
93
|
+
if (!this.js || !this.jsm)
|
|
94
|
+
return;
|
|
95
|
+
const chatSubject = `chat.${jobId}`;
|
|
96
|
+
const streamName = 'PIER_JOBS';
|
|
97
|
+
const nodeSlug = this.config.nodeId.replace(/[^a-zA-Z0-9]/g, '_');
|
|
98
|
+
const jobSlug = jobId.replace(/[^a-zA-Z0-9]/g, '_');
|
|
99
|
+
const durableName = `pier_chat_${nodeSlug}_${jobSlug}`;
|
|
100
|
+
try {
|
|
101
|
+
let consumer;
|
|
102
|
+
try {
|
|
103
|
+
consumer = await this.js.consumers.get(streamName, durableName);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
await this.jsm.consumers.add(streamName, {
|
|
107
|
+
durable_name: durableName,
|
|
108
|
+
filter_subject: chatSubject,
|
|
109
|
+
deliver_policy: DeliverPolicy.New,
|
|
110
|
+
ack_policy: AckPolicy.Explicit,
|
|
111
|
+
ack_wait: 1000 * 60 * 60,
|
|
112
|
+
});
|
|
113
|
+
consumer = await this.js.consumers.get(streamName, durableName);
|
|
114
|
+
}
|
|
115
|
+
const iter = await consumer.consume();
|
|
116
|
+
this.jobSubscriptions.set(jobId, iter);
|
|
117
|
+
(async () => {
|
|
118
|
+
this.logger.info(`[pier-connector][${this.accountId}] \u{1F442} Monitoring ${chatSubject}`);
|
|
119
|
+
const processedMessages = new Set();
|
|
120
|
+
for await (const msg of iter) {
|
|
121
|
+
try {
|
|
122
|
+
const rawMsg = new TextDecoder().decode(msg.data);
|
|
123
|
+
// S10: DoS protection
|
|
124
|
+
if (msg.data.length > 1024 * 1024) {
|
|
125
|
+
msg.ack();
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
let msgPayload = JSON.parse(rawMsg);
|
|
129
|
+
if (msgPayload.id && processedMessages.has(msgPayload.id)) {
|
|
130
|
+
msg.ack();
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (msgPayload.sender_id === this.config.nodeId) {
|
|
134
|
+
msg.ack();
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (msgPayload.type === 'receipt') {
|
|
138
|
+
msg.ack();
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (msgPayload.type === 'system_action' || msgPayload.msg_type === 'system_action') {
|
|
142
|
+
msg.ack();
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
await this.js.publish(chatSubject, new TextEncoder().encode(JSON.stringify({
|
|
147
|
+
type: 'receipt', msg_id: msgPayload.id, reader_id: this.config.nodeId
|
|
148
|
+
})));
|
|
149
|
+
}
|
|
150
|
+
catch (err) { }
|
|
151
|
+
const content = msgPayload.content;
|
|
152
|
+
if (!content) {
|
|
153
|
+
msg.ack();
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
this.logger.info(`[pier-connector][${this.accountId}] \u{1F4AC} Chat: [${jobId}] ${msgPayload.sender_id}: "${truncate(content, 40)}"`);
|
|
157
|
+
if (msgPayload.id)
|
|
158
|
+
processedMessages.add(msgPayload.id);
|
|
159
|
+
const jobMeta = this.activeNodeJobs.get(jobId);
|
|
160
|
+
if (!jobMeta || !jobMeta.isTargeted) {
|
|
161
|
+
msg.ack();
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
msg.ack();
|
|
165
|
+
const inbound = {
|
|
166
|
+
accountId: this.accountId,
|
|
167
|
+
senderId: `pier:${msgPayload.sender_id}`,
|
|
168
|
+
body: content,
|
|
169
|
+
jobId: jobId,
|
|
170
|
+
// 必须使用每条消息的唯一 ID,否则 SDK 会把同一 job 的后续消息当重复消息丢弃
|
|
171
|
+
messageId: msgPayload.id || `${jobId}-${Date.now()}`
|
|
172
|
+
};
|
|
173
|
+
this.logger.info(`[pier-connector:trace] NATS Chat Message received on PierRobot instance accountId='${this.accountId}'. Passing to handleInbound...`);
|
|
174
|
+
await this.onInbound(inbound, jobId);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
this.logger.error(`[pier-connector][${this.accountId}] ✖ Failed to process chat message: ${err.message}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
})();
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
this.logger.error(`[pier-connector][${this.accountId}] Failed to setup chat consumer: ${err.message}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async checkAndStoreNonce(senderId, nonce) {
|
|
187
|
+
const nonceCacheKey = `${senderId}:${nonce}`;
|
|
188
|
+
const now = Date.now();
|
|
189
|
+
// 1. Fast local cache check
|
|
190
|
+
if (this.nonceCache.has(nonceCacheKey)) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
// 2. Persistent KV check (if available)
|
|
194
|
+
if (this.nonceKv) {
|
|
195
|
+
try {
|
|
196
|
+
const existing = await this.nonceKv.get(nonceCacheKey);
|
|
197
|
+
if (existing) {
|
|
198
|
+
this.nonceCache.set(nonceCacheKey, now + 5 * 60 * 1000);
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
// Store in KV with TTL (the bucket has TTL, but we put it here)
|
|
202
|
+
await this.nonceKv.put(nonceCacheKey, new TextEncoder().encode(now.toString()));
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
this.logger.debug(`[pier-connector] Nonce KV check failed (falling back to memory): ${e.message}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// S13: Heap limit protection - prevent nonce collection from growing infinitely
|
|
209
|
+
const MAX_CACHE_ENTRIES = 100000;
|
|
210
|
+
if (this.nonceCache.size >= MAX_CACHE_ENTRIES) {
|
|
211
|
+
// Aggressive cleanup: drop everything older than now if still at limit
|
|
212
|
+
for (const [k, exp] of this.nonceCache) {
|
|
213
|
+
if (exp < now)
|
|
214
|
+
this.nonceCache.delete(k);
|
|
215
|
+
}
|
|
216
|
+
// If still over limit, reject new entry to protect memory
|
|
217
|
+
if (this.nonceCache.size >= MAX_CACHE_ENTRIES) {
|
|
218
|
+
this.logger.warn(`[pier-connector] Nonce cache full (${this.nonceCache.size}). Memory protection triggered.`);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// 3. Update local cache
|
|
223
|
+
this.nonceCache.set(nonceCacheKey, now + 5 * 60 * 1000);
|
|
224
|
+
// Periodic local cleanup
|
|
225
|
+
if (this.nonceCache.size > 10000) {
|
|
226
|
+
for (const [k, exp] of this.nonceCache) {
|
|
227
|
+
if (exp < now)
|
|
228
|
+
this.nonceCache.delete(k);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* S7: Decrement budget with CAS retry logic.
|
|
235
|
+
* Ensures atomic decrement even under high concurrency.
|
|
236
|
+
*/
|
|
237
|
+
async decrementBudgetWithRetry(groupId) {
|
|
238
|
+
const MAX_RETRIES = 5;
|
|
239
|
+
let attempt = 0;
|
|
240
|
+
while (attempt < MAX_RETRIES) {
|
|
241
|
+
try {
|
|
242
|
+
const kv = await this.client.nats.getWorkspaceKV(groupId);
|
|
243
|
+
const entry = await kv.get('budget');
|
|
244
|
+
if (!entry)
|
|
245
|
+
return { success: true, budgetLeft: Infinity }; // No budget set, unlimited
|
|
246
|
+
let currentBudget = parseInt(new TextDecoder().decode(entry.value), 10);
|
|
247
|
+
if (isNaN(currentBudget))
|
|
248
|
+
return { success: true, budgetLeft: Infinity };
|
|
249
|
+
if (currentBudget <= 0)
|
|
250
|
+
return { success: false, budgetLeft: 0 };
|
|
251
|
+
const nextBudget = currentBudget - 1;
|
|
252
|
+
try {
|
|
253
|
+
await kv.update('budget', new TextEncoder().encode(nextBudget.toString()), entry.revision);
|
|
254
|
+
return { success: true, budgetLeft: nextBudget };
|
|
255
|
+
}
|
|
256
|
+
catch (casErr) {
|
|
257
|
+
// CAS Failure: another node updated first. Retry.
|
|
258
|
+
attempt++;
|
|
259
|
+
this.logger.debug(`[pier-connector] Budget CAS conflict for ${groupId}, retry ${attempt}/${MAX_RETRIES}`);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
this.logger.error(`[pier-connector] Budget KV error: ${err.message}`);
|
|
265
|
+
return { success: false, budgetLeft: -1 };
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return { success: false, budgetLeft: -1 }; // Retries exhausted
|
|
269
|
+
}
|
|
270
|
+
async handleGroupChat(subject, payload) {
|
|
271
|
+
if (!payload || !payload.id || !payload.groupId)
|
|
272
|
+
return;
|
|
273
|
+
// --- Zero-Trust Crypto Verification ---
|
|
274
|
+
if (payload.signature && payload.publicKey) {
|
|
275
|
+
const isValid = PierCrypto.verifySwarmMessage(payload);
|
|
276
|
+
if (!isValid) {
|
|
277
|
+
this.logger.warn(`[pier-connector][${this.accountId}] ⚠️ INVALID SIGNATURE from ${payload.senderId} (${payload.publicKey}). Message DROPPED.`);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
this.logger.warn(`[pier-connector][${this.accountId}] ⚠️ UNSIGNATURED MESSAGE from ${payload.senderId}. Accepting via Soft-Block fallback.`);
|
|
283
|
+
}
|
|
284
|
+
// Don't echo our own messages
|
|
285
|
+
if (payload.senderId === this.config.nodeId || payload.senderId === this.accountId)
|
|
286
|
+
return;
|
|
287
|
+
// --- Anti-Replay: Nonce deduplication check (PSP 1.0) ---
|
|
288
|
+
if (payload.nonce) {
|
|
289
|
+
const isFresh = await this.checkAndStoreNonce(payload.senderId, payload.nonce);
|
|
290
|
+
if (!isFresh) {
|
|
291
|
+
this.logger.warn(`[pier-connector][${this.accountId}] ⛔ REPLAY ATTACK DETECTED: duplicate nonce from ${payload.senderId}. Dropped.`);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const isMentioned = !!payload.mentions && (payload.mentions.includes(this.accountId) || payload.mentions.includes('all'));
|
|
296
|
+
const buffer = this.groupRingBuffer.get(payload.groupId) || [];
|
|
297
|
+
buffer.push(payload);
|
|
298
|
+
if (buffer.length > 10)
|
|
299
|
+
buffer.shift();
|
|
300
|
+
this.groupRingBuffer.set(payload.groupId, buffer);
|
|
301
|
+
if (isMentioned) {
|
|
302
|
+
const backlog = buffer.slice(0, -1);
|
|
303
|
+
let injectedBody = payload.content;
|
|
304
|
+
if (backlog.length > 0) {
|
|
305
|
+
const backlogText = backlog.map(m => `[${new Date(m.timestamp).toLocaleTimeString()}] ${m.senderId}: ${m.content}`).join('\n');
|
|
306
|
+
injectedBody = `[System: You were just mentioned. Background context you overheard while silent:\n${backlogText}\nNow, please respond to the latest mention.]\n\n${payload.content}`;
|
|
307
|
+
}
|
|
308
|
+
// Setup FinOps Circuit Breaker Check (S7 Hardened)
|
|
309
|
+
try {
|
|
310
|
+
const { success, budgetLeft } = await this.decrementBudgetWithRetry(payload.groupId);
|
|
311
|
+
if (!success) {
|
|
312
|
+
this.logger.error(`[pier-connector] Budget exhausted or update conflict for workspace ${payload.groupId}. Task BLOCKED.`);
|
|
313
|
+
let sysPayload = {
|
|
314
|
+
version: 'psp-1.0',
|
|
315
|
+
id: `sys-${Date.now()}`,
|
|
316
|
+
namespace: payload.namespace || 'default',
|
|
317
|
+
groupId: payload.groupId,
|
|
318
|
+
senderId: this.accountId,
|
|
319
|
+
content: budgetLeft === 0 ? 'Critical Error: Workspace budget exhausted.' : 'Internal Error: Concurrent budget lock failure.',
|
|
320
|
+
mentions: [],
|
|
321
|
+
timestamp: Date.now()
|
|
322
|
+
};
|
|
323
|
+
if (this.config.privateKey) {
|
|
324
|
+
sysPayload = await PierCrypto.signSwarmMessage(sysPayload, this.config.privateKey);
|
|
325
|
+
}
|
|
326
|
+
await this.client.nats.publishGroupChat(payload.groupId, sysPayload, sysPayload.namespace);
|
|
327
|
+
return; // Hard Block / Fail-Close
|
|
328
|
+
}
|
|
329
|
+
if (budgetLeft <= 20 && budgetLeft !== Infinity) {
|
|
330
|
+
injectedBody = `[System WARNING: FinOps Budget is extremely low (${budgetLeft} left). Please summarize your thoughts and conclude your work immediately.]\n\n` + injectedBody;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch (err) {
|
|
334
|
+
this.logger.warn(`Failed to check budget for workspace ${payload.groupId}: ${err.message}`);
|
|
335
|
+
}
|
|
336
|
+
this.logger.info(`[pier-connector][${this.accountId}] 🔔 Mentioned in group ${payload.groupId} by ${payload.senderId}`);
|
|
337
|
+
this.isBusy = true;
|
|
338
|
+
await this.onInbound({
|
|
339
|
+
accountId: this.accountId,
|
|
340
|
+
senderId: `pierWorkspace:${payload.senderId}`,
|
|
341
|
+
body: injectedBody,
|
|
342
|
+
jobId: payload.groupId,
|
|
343
|
+
messageId: payload.id,
|
|
344
|
+
WasMentioned: true
|
|
345
|
+
}, payload.groupId);
|
|
346
|
+
this.isBusy = false;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
// Silently observe and update context without triggering LLM
|
|
350
|
+
this.logger.debug(`[pier-connector][${this.accountId}] 🤫 Observing group ${payload.groupId} (not mentioned, cached in RingBuffer)`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
async handleMessage(msg) {
|
|
354
|
+
const rawData = new TextDecoder().decode(msg.data);
|
|
355
|
+
let payload;
|
|
356
|
+
try {
|
|
357
|
+
// S10: DoS protection
|
|
358
|
+
if (msg.data.length > 1024 * 1024) {
|
|
359
|
+
msg.ack();
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
payload = JSON.parse(rawData);
|
|
363
|
+
}
|
|
364
|
+
catch (e) {
|
|
365
|
+
msg.ack();
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
// --- Zero-Trust Hard-Block for Task Payloads (PSP 1.0) ---
|
|
369
|
+
if (payload.version === 'psp-1.0' && (payload.type === 'task' || payload.type === 'task_request')) {
|
|
370
|
+
if (payload.signature && payload.publicKey) {
|
|
371
|
+
const isValid = PierCrypto.verifySwarmMessage(payload);
|
|
372
|
+
if (!isValid) {
|
|
373
|
+
this.logger.warn(`[pier-connector][${this.accountId}] 🔴 HARD BLOCK: Invalid signature on task from ${payload.senderId}. Dropping.`);
|
|
374
|
+
msg.ack(); // ACK to remove from queue but do NOT process
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else if (payload.signature !== undefined || payload.publicKey !== undefined) {
|
|
379
|
+
// Has one but not the other — tampered or malformed
|
|
380
|
+
this.logger.warn(`[pier-connector][${this.accountId}] 🔴 HARD BLOCK: Malformed Zero-Trust fields from ${payload.senderId}. Dropping.`);
|
|
381
|
+
msg.ack();
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
// No signature — legacy / unsigned node. Soft-block: log and allow through.
|
|
386
|
+
this.logger.warn(`[pier-connector][${this.accountId}] ⚠️ Unsigned PSP task from ${payload.senderId}. Accepting via Soft-Block (legacy).`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
// --- Anti-Replay: Nonce deduplication for task payloads (PSP 1.0) ---
|
|
390
|
+
if (payload.nonce && payload.senderId) {
|
|
391
|
+
const isFresh = await this.checkAndStoreNonce(payload.senderId, payload.nonce);
|
|
392
|
+
if (!isFresh) {
|
|
393
|
+
this.logger.warn(`[pier-connector][${this.accountId}] ⛔ REPLAY ATTACK DETECTED: duplicate task nonce from ${payload.senderId}. Dropped.`);
|
|
394
|
+
msg.ack();
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
if (payload.type === 'wakeup') {
|
|
399
|
+
const { jobId } = payload;
|
|
400
|
+
if (jobId) {
|
|
401
|
+
this.logger.info(`[pier-connector][${this.accountId}] ⏰ Received wakeup signal for job ${jobId}`);
|
|
402
|
+
if (!this.jobSubscriptions.has(jobId)) {
|
|
403
|
+
this.activeNodeJobs.set(jobId, { pierJobId: jobId, isTargeted: true });
|
|
404
|
+
await this.subscribeToJobMessages(jobId);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
msg.ack();
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
if (payload.type === 'workspace_invite') {
|
|
411
|
+
const { groupId } = payload;
|
|
412
|
+
if (groupId) {
|
|
413
|
+
this.logger.info(`[pier-connector][${this.accountId}] 🤝 Received workspace invitation for ${groupId}`);
|
|
414
|
+
// Workspace messages are handled by the global workspace.>.chat subscription,
|
|
415
|
+
// so we just log it and potentially mark it as an active session for the SDK.
|
|
416
|
+
if (!this.activeNodeJobs.has(groupId)) {
|
|
417
|
+
this.activeNodeJobs.set(groupId, {
|
|
418
|
+
pierJobId: groupId,
|
|
419
|
+
isTargeted: true,
|
|
420
|
+
workspace: true
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
msg.ack();
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
if (this.isBusy) {
|
|
428
|
+
msg.nak();
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
if (payload.assigned_node_id && payload.assigned_node_id !== this.config.nodeId) {
|
|
432
|
+
msg.nak();
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
const jobIdToClaim = payload.id;
|
|
436
|
+
const isTargeted = !!(payload.assigned_node_id || payload.targetNodeId || payload.TargetNodeID);
|
|
437
|
+
if (jobIdToClaim && isTargeted) {
|
|
438
|
+
const claimResult = await this.claimJob(jobIdToClaim);
|
|
439
|
+
if (!claimResult.ok) {
|
|
440
|
+
if (claimResult.alreadyClaimed)
|
|
441
|
+
msg.ack();
|
|
442
|
+
else
|
|
443
|
+
msg.nak();
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
this.isBusy = true;
|
|
448
|
+
msg.ack();
|
|
449
|
+
this.stats.received++;
|
|
450
|
+
// payload 已在上方 JSON.parse 完成,直接用 normalizeInboundPayload 转换
|
|
451
|
+
// 不能再调用 parseJob(msg),因为 msg 已 ack,且 JetStream consume msg 可能没有 string() 方法
|
|
452
|
+
const parsed = normalizeInboundPayload(payload);
|
|
453
|
+
if (!parsed.ok) {
|
|
454
|
+
this.stats.failed++;
|
|
455
|
+
this.isBusy = false;
|
|
456
|
+
this.logger.error(`[pier-connector][${this.accountId}] ✖ Failed to parse job payload: ${parsed.error}`);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
const job = parsed.job;
|
|
460
|
+
const senderCore = job.meta?.sender ?? 'anonymous';
|
|
461
|
+
this.activeNodeJobs.set(job.id, {
|
|
462
|
+
pierJobId: job.id,
|
|
463
|
+
pierNatsMsg: msg,
|
|
464
|
+
pierStartTime: performance.now(),
|
|
465
|
+
pierMeta: job.meta,
|
|
466
|
+
isTargeted: isTargeted
|
|
467
|
+
});
|
|
468
|
+
let finalText = job.task || '';
|
|
469
|
+
if (!isTargeted) {
|
|
470
|
+
finalText = `【PIER MARKETPLACE OPEN JOB】\nJob ID: ${job.id}\nTask: ${job.task}\n\n=== CRITICAL ===\nYou MUST use \`pier_bid_task\` to bid. Do not solve directly.`;
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
await this.subscribeToJobMessages(job.id);
|
|
474
|
+
}
|
|
475
|
+
await this.onInbound({
|
|
476
|
+
accountId: this.accountId,
|
|
477
|
+
senderId: `pier:${senderCore}`,
|
|
478
|
+
body: finalText,
|
|
479
|
+
jobId: job.id,
|
|
480
|
+
messageId: job.id // 初始任务消息用 job.id 作为唯一 ID
|
|
481
|
+
}, job.id);
|
|
482
|
+
this.isBusy = false;
|
|
483
|
+
}
|
|
484
|
+
async setupMarketplaceConsumer(streamName, subjectName, durableName) {
|
|
485
|
+
if (!this.js || !this.jsm)
|
|
486
|
+
return;
|
|
487
|
+
try {
|
|
488
|
+
let consumer;
|
|
489
|
+
try {
|
|
490
|
+
consumer = await this.js.consumers.get(streamName, durableName);
|
|
491
|
+
}
|
|
492
|
+
catch {
|
|
493
|
+
await this.jsm.consumers.add(streamName, {
|
|
494
|
+
durable_name: durableName,
|
|
495
|
+
filter_subject: subjectName,
|
|
496
|
+
deliver_policy: DeliverPolicy.New,
|
|
497
|
+
ack_policy: AckPolicy.Explicit,
|
|
498
|
+
});
|
|
499
|
+
consumer = await this.js.consumers.get(streamName, durableName);
|
|
500
|
+
}
|
|
501
|
+
const iter = await consumer.consume();
|
|
502
|
+
(async () => {
|
|
503
|
+
for await (const msg of iter) {
|
|
504
|
+
await this.handleMessage(msg);
|
|
505
|
+
}
|
|
506
|
+
})().catch(err => {
|
|
507
|
+
this.logger.error(`[pier-connector][${this.accountId}] Consumer error: ${err.message}`);
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
catch (err) {
|
|
511
|
+
this.logger.error(`[pier-connector][${this.accountId}] Setup failed: ${err.message}`);
|
|
512
|
+
throw err;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
async autoRegister() {
|
|
516
|
+
if (!this.config.privateKey)
|
|
517
|
+
return;
|
|
518
|
+
const hostName = `${this.runtime?.hostname ?? 'Auto'}-${this.accountId}`;
|
|
519
|
+
const { nodeId, secretKey } = await this.client.autoRegister(this.config.privateKey, hostName);
|
|
520
|
+
this.config.nodeId = nodeId;
|
|
521
|
+
this.config.secretKey = secretKey;
|
|
522
|
+
}
|
|
523
|
+
async start() {
|
|
524
|
+
this.connectionStatus = 'connecting';
|
|
525
|
+
try {
|
|
526
|
+
if (!this.config.nodeId && this.config.privateKey)
|
|
527
|
+
await this.autoRegister();
|
|
528
|
+
const natsConfig = await this.heartbeat();
|
|
529
|
+
if (!natsConfig)
|
|
530
|
+
throw new Error('No NATS config');
|
|
531
|
+
if (natsConfig.url) {
|
|
532
|
+
this.client.nats.url = natsConfig.url;
|
|
533
|
+
}
|
|
534
|
+
this.nc = await this.client.connectNats();
|
|
535
|
+
this.js = jetstream(this.nc);
|
|
536
|
+
this.jsm = await jetstreamManager(this.nc);
|
|
537
|
+
this.connectionStatus = 'connected';
|
|
538
|
+
// Initialize Nonce Cache KV (S1 fix)
|
|
539
|
+
try {
|
|
540
|
+
this.nonceKv = await this.client.nats.getNonceCacheKV();
|
|
541
|
+
}
|
|
542
|
+
catch (e) {
|
|
543
|
+
this.logger.warn(`[pier-connector] Failed to initialize Nonce KV: ${e.message}. Using memory only.`);
|
|
544
|
+
}
|
|
545
|
+
const streamName = 'PIER_JOBS';
|
|
546
|
+
const durableNameMarket = `pier_market_${this.config.nodeId.replace(/-/g, '_')}_${this.accountId}`;
|
|
547
|
+
const durableNameDirect = `pier_node_${this.config.nodeId.replace(/-/g, '_')}_${this.accountId}`;
|
|
548
|
+
await this.setupMarketplaceConsumer(streamName, this.config.subject, durableNameMarket);
|
|
549
|
+
await this.setupMarketplaceConsumer(streamName, `jobs.node.${this.config.nodeId}`, durableNameDirect);
|
|
550
|
+
// Subscribe to all multi-agent workspaces via NATS core
|
|
551
|
+
// Support PSP Federation namespace wildcards
|
|
552
|
+
this.client.nats.subscribe('workspace.>.chat', (payload, msg) => {
|
|
553
|
+
this.handleGroupChat(msg.subject, payload);
|
|
554
|
+
});
|
|
555
|
+
// Register capability discovery responders (Subject-based Discovery, PSP 1.0)
|
|
556
|
+
if (this.config.capabilities && this.config.capabilities.length > 0) {
|
|
557
|
+
const discoveryInfo = {
|
|
558
|
+
nodeId: this.config.nodeId,
|
|
559
|
+
accountId: this.accountId,
|
|
560
|
+
capabilities: this.config.capabilities,
|
|
561
|
+
timestamp: Date.now(),
|
|
562
|
+
};
|
|
563
|
+
for (const cap of this.config.capabilities) {
|
|
564
|
+
const sub = await this.client.nats.subscribeDiscovery(cap, discoveryInfo, this.config.privateKey);
|
|
565
|
+
this.discoverySubscriptions.push(sub);
|
|
566
|
+
}
|
|
567
|
+
this.logger.info(`[pier-connector][${this.accountId}] 📟 Registered for discovery on ${this.config.capabilities.length} capabilities`);
|
|
568
|
+
}
|
|
569
|
+
if (this.heartbeatTimer)
|
|
570
|
+
clearInterval(this.heartbeatTimer);
|
|
571
|
+
this.heartbeatTimer = setInterval(() => this.heartbeat(), 60000);
|
|
572
|
+
}
|
|
573
|
+
catch (err) {
|
|
574
|
+
this.connectionStatus = 'error';
|
|
575
|
+
this.logger.error(`[pier-connector][${this.accountId}] Start failed: ${err.message}`);
|
|
576
|
+
throw err; // Re-throw to signal failure to Gateway
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
async stop() {
|
|
580
|
+
if (this.heartbeatTimer) {
|
|
581
|
+
clearInterval(this.heartbeatTimer);
|
|
582
|
+
this.heartbeatTimer = null;
|
|
583
|
+
}
|
|
584
|
+
// Cleanup discovery subscriptions
|
|
585
|
+
for (const sub of this.discoverySubscriptions) {
|
|
586
|
+
try {
|
|
587
|
+
sub.unsubscribe();
|
|
588
|
+
}
|
|
589
|
+
catch (e) { }
|
|
590
|
+
}
|
|
591
|
+
this.discoverySubscriptions = [];
|
|
592
|
+
if (this.nc) {
|
|
593
|
+
await this.client.drainNats();
|
|
594
|
+
this.nc = null;
|
|
595
|
+
}
|
|
596
|
+
this.connectionStatus = 'disconnected';
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
//# sourceMappingURL=robot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robot.js","sourceRoot":"","sources":["../src/robot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/cli.ts","../src/config.ts","../src/inbound.ts","../src/index.ts","../src/job-handler.ts","../src/robot.ts","../src/types.ts","../src/types/pier-sdk.d.ts"],"version":"5.9.3"}
|