@dp-pcs/ogp 0.3.3 → 0.4.3

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.
Files changed (112) hide show
  1. package/README.md +317 -61
  2. package/dist/cli/completion.d.ts +5 -0
  3. package/dist/cli/completion.d.ts.map +1 -0
  4. package/dist/cli/completion.js +148 -0
  5. package/dist/cli/completion.js.map +1 -0
  6. package/dist/cli/config.d.ts +3 -0
  7. package/dist/cli/config.d.ts.map +1 -0
  8. package/dist/cli/config.js +207 -0
  9. package/dist/cli/config.js.map +1 -0
  10. package/dist/cli/expose.d.ts.map +1 -1
  11. package/dist/cli/expose.js +20 -13
  12. package/dist/cli/expose.js.map +1 -1
  13. package/dist/cli/federation.d.ts +14 -0
  14. package/dist/cli/federation.d.ts.map +1 -1
  15. package/dist/cli/federation.js +347 -23
  16. package/dist/cli/federation.js.map +1 -1
  17. package/dist/cli/project.d.ts +4 -3
  18. package/dist/cli/project.d.ts.map +1 -1
  19. package/dist/cli/project.js +34 -24
  20. package/dist/cli/project.js.map +1 -1
  21. package/dist/cli/setup.d.ts +23 -0
  22. package/dist/cli/setup.d.ts.map +1 -1
  23. package/dist/cli/setup.js +560 -32
  24. package/dist/cli/setup.js.map +1 -1
  25. package/dist/cli.js +358 -35
  26. package/dist/cli.js.map +1 -1
  27. package/dist/daemon/agent-comms.d.ts.map +1 -1
  28. package/dist/daemon/agent-comms.js +15 -10
  29. package/dist/daemon/agent-comms.js.map +1 -1
  30. package/dist/daemon/heartbeat.d.ts +22 -0
  31. package/dist/daemon/heartbeat.d.ts.map +1 -0
  32. package/dist/daemon/heartbeat.js +119 -0
  33. package/dist/daemon/heartbeat.js.map +1 -0
  34. package/dist/daemon/intent-registry.d.ts.map +1 -1
  35. package/dist/daemon/intent-registry.js +19 -10
  36. package/dist/daemon/intent-registry.js.map +1 -1
  37. package/dist/daemon/keypair.d.ts +1 -0
  38. package/dist/daemon/keypair.d.ts.map +1 -1
  39. package/dist/daemon/keypair.js +151 -18
  40. package/dist/daemon/keypair.js.map +1 -1
  41. package/dist/daemon/message-handler.d.ts.map +1 -1
  42. package/dist/daemon/message-handler.js +30 -16
  43. package/dist/daemon/message-handler.js.map +1 -1
  44. package/dist/daemon/notify.d.ts +19 -0
  45. package/dist/daemon/notify.d.ts.map +1 -1
  46. package/dist/daemon/notify.js +376 -73
  47. package/dist/daemon/notify.js.map +1 -1
  48. package/dist/daemon/openclaw-bridge.d.ts +34 -0
  49. package/dist/daemon/openclaw-bridge.d.ts.map +1 -0
  50. package/dist/daemon/openclaw-bridge.js +261 -0
  51. package/dist/daemon/openclaw-bridge.js.map +1 -0
  52. package/dist/daemon/peers.d.ts +21 -0
  53. package/dist/daemon/peers.d.ts.map +1 -1
  54. package/dist/daemon/peers.js +125 -20
  55. package/dist/daemon/peers.js.map +1 -1
  56. package/dist/daemon/projects.d.ts +9 -6
  57. package/dist/daemon/projects.d.ts.map +1 -1
  58. package/dist/daemon/projects.js +30 -20
  59. package/dist/daemon/projects.js.map +1 -1
  60. package/dist/daemon/server.d.ts +17 -0
  61. package/dist/daemon/server.d.ts.map +1 -1
  62. package/dist/daemon/server.js +188 -77
  63. package/dist/daemon/server.js.map +1 -1
  64. package/dist/shared/config.d.ts +52 -1
  65. package/dist/shared/config.d.ts.map +1 -1
  66. package/dist/shared/config.js +18 -11
  67. package/dist/shared/config.js.map +1 -1
  68. package/dist/shared/framework-detection.d.ts +31 -0
  69. package/dist/shared/framework-detection.d.ts.map +1 -0
  70. package/dist/shared/framework-detection.js +91 -0
  71. package/dist/shared/framework-detection.js.map +1 -0
  72. package/dist/shared/help.d.ts +5 -0
  73. package/dist/shared/help.d.ts.map +1 -0
  74. package/dist/shared/help.js +281 -0
  75. package/dist/shared/help.js.map +1 -0
  76. package/dist/shared/meta-config.d.ts +44 -0
  77. package/dist/shared/meta-config.d.ts.map +1 -0
  78. package/dist/shared/meta-config.js +89 -0
  79. package/dist/shared/meta-config.js.map +1 -0
  80. package/dist/shared/migration.d.ts +57 -0
  81. package/dist/shared/migration.d.ts.map +1 -0
  82. package/dist/shared/migration.js +255 -0
  83. package/dist/shared/migration.js.map +1 -0
  84. package/docs/CLI-REFERENCE.md +1361 -0
  85. package/docs/GETTING-STARTED.md +953 -0
  86. package/docs/MIGRATION.md +202 -0
  87. package/docs/MULTI-FRAMEWORK-DEMO.md +352 -0
  88. package/docs/MULTI-FRAMEWORK-DESIGN.md +378 -0
  89. package/docs/MULTI-FRAMEWORK-IMPL.md +197 -0
  90. package/docs/case-studies/CRASH_RESOLUTION_20260407.md +190 -0
  91. package/docs/case-studies/OpenClaw_Hermes_Status_Report_20260407.md +142 -0
  92. package/docs/case-studies/OpenClaw_Stability_Fix_Summary.md +209 -0
  93. package/docs/case-studies/README.md +40 -0
  94. package/docs/case-studies/crash_observations.md +250 -0
  95. package/docs/cloudflare-named-tunnel-setup.md +126 -0
  96. package/docs/federation-flow.md +27 -37
  97. package/docs/hermes-implementation-checklist.md +4 -0
  98. package/docs/project-intent-testing.md +97 -0
  99. package/docs/quickstart.md +12 -4
  100. package/docs/rendezvous.md +13 -14
  101. package/docs/scopes.md +13 -13
  102. package/package.json +12 -6
  103. package/scripts/completion.bash +123 -0
  104. package/scripts/completion.zsh +372 -0
  105. package/scripts/install-skills.js +19 -1
  106. package/scripts/test-migration-execute.js +74 -0
  107. package/scripts/test-migration.js +42 -0
  108. package/scripts/test-project-intents.mjs +614 -0
  109. package/skills/ogp/SKILL.md +197 -64
  110. package/skills/ogp-agent-comms/SKILL.md +107 -41
  111. package/skills/ogp-expose/SKILL.md +183 -25
  112. package/skills/ogp-project/SKILL.md +110 -88
@@ -1,5 +1,7 @@
1
1
  import { requireConfig } from '../shared/config.js';
2
2
  import crypto from 'node:crypto';
3
+ import { dispatchAgentHook, injectMessage } from './openclaw-bridge.js';
4
+ import { sendReply } from './reply-handler.js';
3
5
  /**
4
6
  * Resolve the notification target for a given agent.
5
7
  * Priority:
@@ -15,88 +17,364 @@ function resolveNotifyTarget(config, agent) {
15
17
  // Fall back to legacy notifyTarget
16
18
  return config.notifyTarget;
17
19
  }
20
+ function resolveHumanDeliveryTarget(config, agent) {
21
+ return config.humanDeliveryTarget || resolveNotifyTarget(config, agent);
22
+ }
23
+ function resolveInternalOpenClawSessionKey(config) {
24
+ const agentId = config.agentId || 'main';
25
+ return `agent:${agentId}:main`;
26
+ }
27
+ function targetToSessionKey(target, agentId) {
28
+ if (target.startsWith('agent:')) {
29
+ return target;
30
+ }
31
+ if (target.startsWith('session:')) {
32
+ return target.slice('session:'.length);
33
+ }
34
+ if (target.startsWith('telegram:')) {
35
+ const chatId = target.replace('telegram:', '');
36
+ return `agent:${agentId}:telegram:direct:${chatId}`;
37
+ }
38
+ return `agent:${agentId}:main`;
39
+ }
40
+ function resolveOpenClawSessionKey(config, agent) {
41
+ const agentId = config.agentId || 'main';
42
+ const target = resolveHumanDeliveryTarget(config, agent);
43
+ if (target) {
44
+ return targetToSessionKey(target, agentId);
45
+ }
46
+ return `agent:${agentId}:main`;
47
+ }
48
+ function resolveOpenClawDeliveryTarget(config, agent) {
49
+ const target = resolveHumanDeliveryTarget(config, agent);
50
+ if (!target) {
51
+ return undefined;
52
+ }
53
+ if (target.startsWith('telegram:')) {
54
+ return {
55
+ channel: 'telegram',
56
+ to: target.replace('telegram:', '')
57
+ };
58
+ }
59
+ const parts = target.split(':').filter(Boolean);
60
+ if (parts[0] !== 'agent') {
61
+ return undefined;
62
+ }
63
+ if (parts.length >= 5 && parts[2] === 'telegram' && parts[3] === 'direct') {
64
+ return {
65
+ channel: 'telegram',
66
+ to: parts[4]
67
+ };
68
+ }
69
+ if (parts.length >= 6 && parts[2] === 'telegram' && parts[4] === 'direct') {
70
+ return {
71
+ channel: 'telegram',
72
+ to: parts[5]
73
+ };
74
+ }
75
+ return undefined;
76
+ }
77
+ function getInboundFederationMode(config) {
78
+ return config.inboundFederationPolicy?.mode;
79
+ }
80
+ function getPayloadMetadata(payload) {
81
+ return payload.metadata ?? {};
82
+ }
83
+ function getOgpMetadata(payload) {
84
+ const metadata = getPayloadMetadata(payload);
85
+ return metadata.ogp ?? {};
86
+ }
87
+ function resolvePayloadIntent(payload) {
88
+ return payload.intent || getOgpMetadata(payload).intent;
89
+ }
90
+ function resolvePayloadTopic(payload) {
91
+ return payload.topic || getOgpMetadata(payload).topic;
92
+ }
93
+ function resolvePayloadPeerId(payload) {
94
+ const ogp = getOgpMetadata(payload);
95
+ return payload.peerId || ogp.from || ogp.peer?.id;
96
+ }
97
+ function resolvePayloadPeerDisplayName(payload) {
98
+ const ogp = getOgpMetadata(payload);
99
+ return payload.peerDisplayName || ogp.peer?.displayName;
100
+ }
101
+ function mergeRule(target, rule) {
102
+ if (!rule) {
103
+ return;
104
+ }
105
+ if (rule.mode !== undefined) {
106
+ target.mode = rule.mode;
107
+ }
108
+ if (rule.relayMode !== undefined) {
109
+ target.relayMode = rule.relayMode;
110
+ }
111
+ if (rule.surfaceToHuman !== undefined) {
112
+ target.surfaceToHuman = rule.surfaceToHuman;
113
+ }
114
+ if (rule.allowDirectPeerReply !== undefined) {
115
+ target.allowDirectPeerReply = rule.allowDirectPeerReply;
116
+ }
117
+ }
118
+ function applyDelegatedAuthorityPrecedence(accumulated, config, messageClass, topic, peerId) {
119
+ const legacyMode = getInboundFederationMode(config);
120
+ if (legacyMode) {
121
+ accumulated.mode = legacyMode;
122
+ }
123
+ const delegatedAuthority = config.delegatedAuthority;
124
+ if (!delegatedAuthority) {
125
+ return;
126
+ }
127
+ const peerScope = peerId ? delegatedAuthority.peers?.[peerId] : undefined;
128
+ // Deterministic precedence contract:
129
+ // 1. Legacy coarse mode as baseline fallback
130
+ // 2. Default rules: global, then peer
131
+ // 3. Message-class rules: global, then peer
132
+ // 4. Topic rules: global, then peer
133
+ //
134
+ // This prevents peer defaults from accidentally erasing a more specific
135
+ // global class rule such as "human-relay must not allow direct peer reply."
136
+ mergeRule(accumulated, delegatedAuthority.global.defaultRule);
137
+ mergeRule(accumulated, peerScope?.defaultRule);
138
+ mergeRule(accumulated, delegatedAuthority.global.classRules?.[messageClass]);
139
+ mergeRule(accumulated, peerScope?.classRules?.[messageClass]);
140
+ if (topic) {
141
+ mergeRule(accumulated, delegatedAuthority.global.topicRules?.[topic]);
142
+ mergeRule(accumulated, peerScope?.topicRules?.[topic]);
143
+ }
144
+ }
145
+ /**
146
+ * Send replyTo callback if present in payload metadata
147
+ * This completes the --wait loop for the initiating peer
148
+ */
149
+ async function handleReplyToCallback(payload, success, data, error) {
150
+ const ogp = getOgpMetadata(payload);
151
+ const replyTo = ogp.replyTo;
152
+ const nonce = ogp.nonce;
153
+ const peerId = resolvePayloadPeerId(payload);
154
+ if (!replyTo || !nonce || !peerId) {
155
+ // No replyTo callback requested
156
+ return;
157
+ }
158
+ const replyPayload = {
159
+ nonce,
160
+ success,
161
+ data,
162
+ error,
163
+ timestamp: new Date().toISOString()
164
+ };
165
+ try {
166
+ const result = await sendReply(peerId, replyTo, replyPayload);
167
+ if (!result.success) {
168
+ console.warn(`[OGP] Failed to send replyTo callback to ${peerId}:`, result.error);
169
+ }
170
+ }
171
+ catch (err) {
172
+ console.error(`[OGP] Error sending replyTo callback to ${peerId}:`, err);
173
+ }
174
+ }
175
+ export function classifyFederatedMessage(payload) {
176
+ if (payload.messageClass) {
177
+ return payload.messageClass;
178
+ }
179
+ const ogp = getOgpMetadata(payload);
180
+ const intent = resolvePayloadIntent(payload);
181
+ if (ogp.messageClass) {
182
+ return ogp.messageClass;
183
+ }
184
+ switch (ogp.type) {
185
+ case 'federation_request':
186
+ case 'approval_request':
187
+ return 'approval-request';
188
+ case 'federation_removed':
189
+ return 'status-update';
190
+ }
191
+ if (ogp.requestedHumanRelay === true) {
192
+ return 'human-relay';
193
+ }
194
+ if (intent === 'status-update') {
195
+ return 'status-update';
196
+ }
197
+ if (intent === 'agent-comms') {
198
+ return 'agent-work';
199
+ }
200
+ return 'agent-work';
201
+ }
202
+ function defaultRelayModeForMode(mode) {
203
+ switch (mode) {
204
+ case 'approval-required':
205
+ return 'approval-required';
206
+ case 'summarize':
207
+ return 'summarize';
208
+ case 'forward':
209
+ case 'autonomous':
210
+ default:
211
+ return 'deliver';
212
+ }
213
+ }
214
+ function defaultSurfaceToHumanForMode(mode) {
215
+ switch (mode) {
216
+ case 'forward':
217
+ return 'always';
218
+ case 'autonomous':
219
+ return 'important-only';
220
+ case 'approval-required':
221
+ return 'always';
222
+ case 'summarize':
223
+ default:
224
+ return 'summary-only';
225
+ }
226
+ }
227
+ export function resolveFederatedHandlingPolicy(config, payload) {
228
+ const messageClass = classifyFederatedMessage(payload);
229
+ const topic = resolvePayloadTopic(payload);
230
+ const peerId = resolvePayloadPeerId(payload);
231
+ const accumulated = {};
232
+ applyDelegatedAuthorityPrecedence(accumulated, config, messageClass, topic, peerId);
233
+ if (messageClass === 'approval-request') {
234
+ return {
235
+ messageClass,
236
+ topic,
237
+ mode: accumulated.mode ?? 'approval-required',
238
+ relayMode: accumulated.relayMode ?? 'approval-required',
239
+ surfaceToHuman: accumulated.surfaceToHuman ?? 'always',
240
+ allowDirectPeerReply: accumulated.allowDirectPeerReply ?? false
241
+ };
242
+ }
243
+ const mode = accumulated.mode ?? 'summarize';
244
+ const relayMode = accumulated.relayMode ?? (messageClass === 'human-relay'
245
+ ? defaultRelayModeForMode(mode)
246
+ : defaultRelayModeForMode(mode));
247
+ const surfaceToHuman = accumulated.surfaceToHuman ?? (messageClass === 'human-relay' && relayMode === 'deliver'
248
+ ? 'always'
249
+ : messageClass === 'status-update'
250
+ ? 'summary-only'
251
+ : defaultSurfaceToHumanForMode(mode));
252
+ const allowDirectPeerReply = accumulated.allowDirectPeerReply ?? (messageClass === 'agent-work' && mode !== 'approval-required');
253
+ return {
254
+ messageClass,
255
+ topic,
256
+ mode,
257
+ relayMode,
258
+ surfaceToHuman,
259
+ allowDirectPeerReply
260
+ };
261
+ }
262
+ function shouldDeliverToHuman(policy) {
263
+ if (policy.messageClass === 'approval-request') {
264
+ return true;
265
+ }
266
+ return policy.surfaceToHuman !== 'never';
267
+ }
268
+ export function formatHandlingGuidance(config, payload) {
269
+ const policy = resolveFederatedHandlingPolicy(config, payload);
270
+ const target = resolveHumanDeliveryTarget(config);
271
+ const targetNote = target ? `Configured human delivery target: ${target}.` : '';
272
+ switch (policy.messageClass) {
273
+ case 'approval-request':
274
+ return `Message class: approval-request. Human preference: hold action and peer replies until the human explicitly approves. Surface this request to the human now. ${targetNote}`.trim();
275
+ case 'human-relay':
276
+ switch (policy.relayMode) {
277
+ case 'summarize':
278
+ return `Message class: human-relay. Human preference: summarize the requested relay for the human instead of claiming verbatim delivery. Do not tell the peer the human was notified unless that actually happened. ${targetNote}`.trim();
279
+ case 'approval-required':
280
+ return `Message class: human-relay. Human preference: hold this relay for approval before treating it as delivered. Do not claim delivery to the peer until the human approves and the delivery actually happens. ${targetNote}`.trim();
281
+ case 'deliver':
282
+ default:
283
+ return `Message class: human-relay. Human preference: treat this as a delivery obligation to the configured human channel. Do not claim delivery to the peer unless you actually deliver it there. ${targetNote}`.trim();
284
+ }
285
+ case 'status-update':
286
+ return `Message class: status-update. Human preference: keep this lightweight and summarize it unless it becomes urgent or approval-related. ${targetNote}`.trim();
287
+ }
288
+ switch (policy.mode) {
289
+ case 'forward':
290
+ return `Human preference: proactively forward inbound federated items to the configured human channel. Do not claim delivery unless you actually send it there. ${targetNote}`.trim();
291
+ case 'summarize':
292
+ return `Human preference: summarize inbound federated items and surface only action requests, uncertainty, or important updates. Do not assume that mentioning it in a different channel counts as delivery. ${targetNote}`.trim();
293
+ case 'autonomous':
294
+ return `Human preference: act autonomously when possible, but if a peer explicitly asks you to tell the human something, treat that as a delivery obligation to the configured human channel. ${targetNote}`.trim();
295
+ case 'approval-required':
296
+ return `Human preference: do not act on or reply to federated requests until the human explicitly approves. ${targetNote}`.trim();
297
+ default:
298
+ return '';
299
+ }
300
+ }
18
301
  /**
19
302
  * OpenClaw notification backend.
20
- * Uses the existing OpenClaw webhook and CLI integration.
303
+ * Uses the OpenClaw gateway RPC to deliver messages into the correct session.
21
304
  */
22
305
  class OpenClawBackend {
23
306
  name = 'openclaw';
24
307
  async notify(payload, config) {
25
- // Method 1: POST /hooks/agent
26
- const hooksToken = config.openclawHooksToken;
27
- if (hooksToken && config.openclawUrl) {
28
- const openclawUrl = config.openclawUrl.replace(/\/$/, '');
29
- try {
30
- const result = await new Promise((resolve) => {
31
- import('node:https').then(({ request: httpsRequest }) => {
32
- import('node:http').then(({ request: httpRequest }) => {
33
- import('node:url').then(({ URL }) => {
34
- const url = new URL(`${openclawUrl}/hooks/agent`);
35
- const isHttps = url.protocol === 'https:';
36
- const target = resolveNotifyTarget(config, payload.agent);
37
- const hookPayload = {
38
- agentId: payload.agent || config.agentId || 'default',
39
- peerId: payload.peerId || payload.metadata?.ogp?.from || 'unknown',
40
- intent: payload.intent || payload.metadata?.ogp?.intent || 'unknown',
41
- topic: payload.topic || payload.metadata?.ogp?.topic || 'general',
42
- message: payload.text,
43
- notifyTarget: target || config.notifyTarget || null,
44
- timestamp: new Date().toISOString(),
45
- // Legacy fields for backward compatibility
46
- name: 'OGP',
47
- deliver: true,
48
- channel: config.notifyChannel || 'last',
49
- ...(target ? { to: target } : {}),
50
- };
51
- const body = JSON.stringify(hookPayload);
52
- const reqFn = isHttps ? httpsRequest : httpRequest;
53
- const req = reqFn({
54
- hostname: url.hostname,
55
- port: url.port || (isHttps ? 443 : 80),
56
- path: url.pathname,
57
- method: 'POST',
58
- rejectUnauthorized: false,
59
- headers: {
60
- 'Content-Type': 'application/json',
61
- 'Authorization': `Bearer ${hooksToken}`,
62
- 'Content-Length': Buffer.byteLength(body),
63
- },
64
- }, (res) => {
65
- resolve(res.statusCode !== undefined && res.statusCode >= 200 && res.statusCode < 300);
66
- });
67
- req.on('error', () => resolve(false));
68
- req.setTimeout(5000, () => { req.destroy(); resolve(false); });
69
- req.write(body);
70
- req.end();
71
- });
72
- });
73
- });
74
- });
75
- if (result) {
76
- console.log('[OGP] Notified OpenClaw via /hooks/agent:', payload.text);
308
+ const peerName = resolvePayloadPeerDisplayName(payload) || resolvePayloadPeerId(payload) || 'unknown peer';
309
+ const intent = resolvePayloadIntent(payload) || 'message';
310
+ const topic = resolvePayloadTopic(payload) || 'general';
311
+ const handlingGuidance = formatHandlingGuidance(config, payload);
312
+ const policy = resolveFederatedHandlingPolicy(config, payload);
313
+ const deliverToHuman = shouldDeliverToHuman(policy);
314
+ const taskText = `Federated message from ${peerName} (${intent}/${topic}).
315
+
316
+ Message:
317
+ ${payload.text}${handlingGuidance ? `\n\n[OGP Handling Policy]\n${handlingGuidance}` : ''}`;
318
+ const sessionMessageText = `[OGP Federation] From ${peerName} (${intent}/${topic}):\n${payload.text}${handlingGuidance ? `\n\n[OGP Handling Policy]\n${handlingGuidance}` : ''}`;
319
+ try {
320
+ const deliveryTarget = deliverToHuman
321
+ ? resolveOpenClawDeliveryTarget(config, payload.agent)
322
+ : undefined;
323
+ const deliverySessionKey = deliverToHuman
324
+ ? resolveOpenClawSessionKey(config, payload.agent)
325
+ : resolveInternalOpenClawSessionKey(config);
326
+ const hookDelivered = await dispatchAgentHook(taskText, peerName, {
327
+ deliver: deliverToHuman,
328
+ target: deliveryTarget,
329
+ sessionKey: deliverySessionKey
330
+ });
331
+ if (hookDelivered) {
332
+ if (!deliverToHuman) {
333
+ console.log('[OGP] Message delivered to OpenClaw via /hooks/agent without proactive human delivery for peer:', peerName);
334
+ // Send replyTo callback if requested
335
+ await handleReplyToCallback(payload, true, { received: true });
77
336
  return true;
78
337
  }
79
- console.warn('[OGP] /hooks/agent call failed (non-2xx or error), falling back');
338
+ const sessionKey = resolveOpenClawSessionKey(config, payload.agent);
339
+ const syncNote = `[OGP Internal Sync]
340
+ A federated request from ${peerName} (${intent}/${topic}) was handled via /hooks/agent and delivered to the configured human channel.
341
+
342
+ Do not treat this as a new pending delivery obligation unless the human asks you to revisit it.
343
+
344
+ Handled message summary:
345
+ ${payload.text}`;
346
+ const synced = await injectMessage(sessionKey, syncNote, peerName);
347
+ if (!synced) {
348
+ console.warn('[OGP] Hook delivery succeeded, but DM-session sync note failed for peer:', peerName);
349
+ }
350
+ console.log('[OGP] Message delivered to OpenClaw via /hooks/agent for peer:', peerName);
351
+ // Send replyTo callback if requested
352
+ await handleReplyToCallback(payload, true, { received: true });
353
+ return true;
80
354
  }
81
- catch (error) {
82
- console.error('[OGP] /hooks/agent failed:', error);
355
+ const sessionKey = deliverToHuman
356
+ ? resolveOpenClawSessionKey(config, payload.agent)
357
+ : resolveInternalOpenClawSessionKey(config);
358
+ const result = await injectMessage(sessionKey, sessionMessageText, peerName);
359
+ if (result) {
360
+ console.log('[OGP] Message delivered to OpenClaw session fallback for peer:', peerName);
361
+ // Send replyTo callback if requested
362
+ await handleReplyToCallback(payload, true, { received: true });
363
+ return true;
364
+ }
365
+ else {
366
+ console.error('[OGP] OpenClaw notification delivery failed');
367
+ // Send failure callback if requested
368
+ await handleReplyToCallback(payload, false, undefined, 'OpenClaw session injection failed');
369
+ return false;
83
370
  }
84
- }
85
- // Method 2: openclaw system event --mode now (CLI fallback)
86
- try {
87
- const { execSync } = await import('node:child_process');
88
- const escaped = payload.text.replace(/'/g, "'\\''");
89
- execSync(`openclaw system event --text '${escaped}' --mode now 2>/dev/null`, {
90
- timeout: 5000,
91
- env: { ...process.env }
92
- });
93
- console.log('[OGP] Notified OpenClaw via system event CLI:', payload.text);
94
- return true;
95
371
  }
96
372
  catch (err) {
97
- console.error('[OGP] System event CLI failed:', err);
373
+ console.error('[OGP] Message injection failed:', err);
374
+ // Send failure callback if requested
375
+ await handleReplyToCallback(payload, false, undefined, err instanceof Error ? err.message : String(err));
376
+ return false;
98
377
  }
99
- return false;
100
378
  }
101
379
  }
102
380
  /**
@@ -106,6 +384,7 @@ class OpenClawBackend {
106
384
  class HermesBackend {
107
385
  name = 'hermes';
108
386
  async notify(payload, config) {
387
+ const policy = resolveFederatedHandlingPolicy(config, payload);
109
388
  const webhookUrl = config.hermesWebhookUrl || 'http://localhost:8644/webhooks/ogp_federation';
110
389
  const secret = config.hermesWebhookSecret;
111
390
  if (!secret) {
@@ -114,16 +393,21 @@ class HermesBackend {
114
393
  }
115
394
  // Build webhook payload
116
395
  // Note: event_type is required by Hermes webhook event filter ("events" subscription list)
117
- const intentStr = payload.intent || 'message';
396
+ const intentStr = resolvePayloadIntent(payload) || 'message';
118
397
  const body = {
119
398
  event_type: intentStr, // required for Hermes event filter ("*" is not a wildcard there)
120
- peer_id: payload.peerId || 'unknown',
121
- peer_display_name: payload.peerDisplayName || payload.peerId || 'Unknown Peer',
399
+ peer_id: resolvePayloadPeerId(payload) || 'unknown',
400
+ peer_display_name: resolvePayloadPeerDisplayName(payload) || resolvePayloadPeerId(payload) || 'Unknown Peer',
122
401
  intent: intentStr,
123
- topic: payload.topic || 'general',
402
+ topic: resolvePayloadTopic(payload) || 'general',
124
403
  message: payload.text,
125
404
  priority: payload.priority || 'normal',
126
405
  conversation_id: payload.conversationId,
406
+ human_delivery_target: resolveHumanDeliveryTarget(config, payload.agent),
407
+ handling_mode: policy.mode,
408
+ message_class: classifyFederatedMessage(payload),
409
+ human_surfacing_mode: policy.surfaceToHuman,
410
+ relay_mode: policy.relayMode,
127
411
  timestamp: new Date().toISOString(),
128
412
  payload: payload.metadata || {}
129
413
  };
@@ -171,15 +455,21 @@ class HermesBackend {
171
455
  });
172
456
  if (result) {
173
457
  console.log('[OGP] Notified Hermes via webhook:', payload.text);
458
+ // Send replyTo callback if requested
459
+ await handleReplyToCallback(payload, true, { received: true });
174
460
  return true;
175
461
  }
176
462
  else {
177
463
  console.error('[OGP] Hermes webhook call failed (non-2xx response)');
464
+ // Send failure callback if requested
465
+ await handleReplyToCallback(payload, false, undefined, 'Hermes webhook returned non-2xx status');
178
466
  return false;
179
467
  }
180
468
  }
181
469
  catch (error) {
182
470
  console.error('[OGP] Hermes webhook failed:', error);
471
+ // Send failure callback if requested
472
+ await handleReplyToCallback(payload, false, undefined, error instanceof Error ? error.message : String(error));
183
473
  return false;
184
474
  }
185
475
  }
@@ -215,4 +505,17 @@ export async function notifyLocalAgent(payload) {
215
505
  const backend = getNotificationBackend(config);
216
506
  return backend.notify(payload, config);
217
507
  }
508
+ /**
509
+ * Inject plain text into the local OpenClaw session without wrapping it as an
510
+ * inbound federation message. This is used to mirror local outbound actions
511
+ * into the agent's visible conversation state.
512
+ */
513
+ export async function deliverLocalSessionText(text, agent) {
514
+ const config = requireConfig();
515
+ if ((config.platform || 'openclaw') !== 'openclaw') {
516
+ return false;
517
+ }
518
+ const sessionKey = resolveOpenClawSessionKey(config, agent);
519
+ return injectMessage(sessionKey, text);
520
+ }
218
521
  //# sourceMappingURL=notify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/daemon/notify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/daemon/notify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * OpenClaw Bridge for OGP Notifications
3
+ *
4
+ * Primary path: /hooks/agent so OpenClaw can run an isolated agent turn and
5
+ * deliver the result through its normal channel-routing logic.
6
+ *
7
+ * Secondary path: Gateway RPC sessions.send for direct session injection.
8
+ */
9
+ type DeliveryTarget = {
10
+ channel?: string;
11
+ to?: string;
12
+ };
13
+ type HookDispatchOptions = {
14
+ deliver?: boolean;
15
+ target?: DeliveryTarget;
16
+ sessionKey?: string;
17
+ };
18
+ /**
19
+ * Connect bridge (no-op for request-based implementation)
20
+ */
21
+ export declare function connectBridge(): void;
22
+ export declare function dispatchAgentHook(message: string, from: string, options?: HookDispatchOptions): Promise<boolean>;
23
+ /**
24
+ * Inject a message into an OpenClaw session using the gateway RPC.
25
+ * Note: OpenClaw currently renders these messages with sender "cli", so OGP must
26
+ * include peer identity in the message content itself.
27
+ */
28
+ export declare function injectMessage(sessionKey: string, message: string, from?: string): Promise<boolean>;
29
+ /**
30
+ * Disconnect bridge (no-op for request-based implementation)
31
+ */
32
+ export declare function disconnectBridge(): void;
33
+ export {};
34
+ //# sourceMappingURL=openclaw-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-bridge.d.ts","sourceRoot":"","sources":["../../src/daemon/openclaw-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAyNF;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiDlB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CA2BlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}