@dp-pcs/ogp 0.2.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.
Files changed (82) hide show
  1. package/README.md +437 -0
  2. package/dist/cli/agent-comms.d.ts +55 -0
  3. package/dist/cli/agent-comms.d.ts.map +1 -0
  4. package/dist/cli/agent-comms.js +217 -0
  5. package/dist/cli/agent-comms.js.map +1 -0
  6. package/dist/cli/expose.d.ts +3 -0
  7. package/dist/cli/expose.d.ts.map +1 -0
  8. package/dist/cli/expose.js +104 -0
  9. package/dist/cli/expose.js.map +1 -0
  10. package/dist/cli/federation.d.ts +28 -0
  11. package/dist/cli/federation.d.ts.map +1 -0
  12. package/dist/cli/federation.js +409 -0
  13. package/dist/cli/federation.js.map +1 -0
  14. package/dist/cli/install.d.ts +3 -0
  15. package/dist/cli/install.d.ts.map +1 -0
  16. package/dist/cli/install.js +111 -0
  17. package/dist/cli/install.js.map +1 -0
  18. package/dist/cli/setup.d.ts +2 -0
  19. package/dist/cli/setup.d.ts.map +1 -0
  20. package/dist/cli/setup.js +33 -0
  21. package/dist/cli/setup.js.map +1 -0
  22. package/dist/cli.d.ts +3 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +305 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/daemon/agent-comms.d.ts +76 -0
  27. package/dist/daemon/agent-comms.d.ts.map +1 -0
  28. package/dist/daemon/agent-comms.js +188 -0
  29. package/dist/daemon/agent-comms.js.map +1 -0
  30. package/dist/daemon/doorman.d.ts +52 -0
  31. package/dist/daemon/doorman.d.ts.map +1 -0
  32. package/dist/daemon/doorman.js +203 -0
  33. package/dist/daemon/doorman.js.map +1 -0
  34. package/dist/daemon/intent-registry.d.ts +11 -0
  35. package/dist/daemon/intent-registry.d.ts.map +1 -0
  36. package/dist/daemon/intent-registry.js +101 -0
  37. package/dist/daemon/intent-registry.js.map +1 -0
  38. package/dist/daemon/keypair.d.ts +5 -0
  39. package/dist/daemon/keypair.d.ts.map +1 -0
  40. package/dist/daemon/keypair.js +25 -0
  41. package/dist/daemon/keypair.js.map +1 -0
  42. package/dist/daemon/message-handler.d.ts +20 -0
  43. package/dist/daemon/message-handler.d.ts.map +1 -0
  44. package/dist/daemon/message-handler.js +159 -0
  45. package/dist/daemon/message-handler.js.map +1 -0
  46. package/dist/daemon/notify.d.ts +7 -0
  47. package/dist/daemon/notify.d.ts.map +1 -0
  48. package/dist/daemon/notify.js +54 -0
  49. package/dist/daemon/notify.js.map +1 -0
  50. package/dist/daemon/peers.d.ts +66 -0
  51. package/dist/daemon/peers.d.ts.map +1 -0
  52. package/dist/daemon/peers.js +171 -0
  53. package/dist/daemon/peers.js.map +1 -0
  54. package/dist/daemon/reply-handler.d.ts +67 -0
  55. package/dist/daemon/reply-handler.d.ts.map +1 -0
  56. package/dist/daemon/reply-handler.js +176 -0
  57. package/dist/daemon/reply-handler.js.map +1 -0
  58. package/dist/daemon/scopes.d.ts +62 -0
  59. package/dist/daemon/scopes.d.ts.map +1 -0
  60. package/dist/daemon/scopes.js +113 -0
  61. package/dist/daemon/scopes.js.map +1 -0
  62. package/dist/daemon/server.d.ts +8 -0
  63. package/dist/daemon/server.d.ts.map +1 -0
  64. package/dist/daemon/server.js +286 -0
  65. package/dist/daemon/server.js.map +1 -0
  66. package/dist/shared/config.d.ts +42 -0
  67. package/dist/shared/config.d.ts.map +1 -0
  68. package/dist/shared/config.js +42 -0
  69. package/dist/shared/config.js.map +1 -0
  70. package/dist/shared/signing.d.ts +13 -0
  71. package/dist/shared/signing.d.ts.map +1 -0
  72. package/dist/shared/signing.js +46 -0
  73. package/dist/shared/signing.js.map +1 -0
  74. package/docs/agent-comms.md +277 -0
  75. package/docs/federation-flow.md +407 -0
  76. package/docs/quickstart.md +241 -0
  77. package/docs/scopes.md +198 -0
  78. package/package.json +57 -0
  79. package/scripts/install-skills.js +32 -0
  80. package/skills/ogp/SKILL.md +235 -0
  81. package/skills/ogp-agent-comms/SKILL.md +345 -0
  82. package/skills/ogp-expose/SKILL.md +281 -0
@@ -0,0 +1,217 @@
1
+ /**
2
+ * CLI commands for agent-comms configuration
3
+ */
4
+ import { loadAgentCommsConfig, setGlobalTopicPolicy, setDefaultLevel, getAllEffectivePolicies, readActivityLog, clearActivityLog, setActivityLogging } from '../daemon/agent-comms.js';
5
+ import { listPeers, getPeer, setPeerTopicPolicy, removePeerTopicPolicy, clearPeerResponsePolicy } from '../daemon/peers.js';
6
+ /**
7
+ * Show all policies (global + per-peer)
8
+ */
9
+ export function showPolicies(peerId) {
10
+ const config = loadAgentCommsConfig();
11
+ if (peerId) {
12
+ // Show specific peer's effective policies
13
+ const peer = findPeerByIdOrName(peerId);
14
+ if (!peer) {
15
+ console.error(`Peer not found: ${peerId}`);
16
+ return;
17
+ }
18
+ console.log(`\nPOLICIES FOR ${peer.displayName} (${peer.id}):\n`);
19
+ const effective = getAllEffectivePolicies(peer.id);
20
+ const peerSpecific = peer.responsePolicy || {};
21
+ if (Object.keys(effective).length === 0) {
22
+ console.log(' No policies configured (will use default level)');
23
+ }
24
+ else {
25
+ for (const [topic, policy] of Object.entries(effective)) {
26
+ const source = peerSpecific[topic] ? '(peer-specific)' : '(global)';
27
+ const notes = policy.notes ? ` - ${policy.notes}` : '';
28
+ console.log(` ${topic}: ${policy.level} ${source}${notes}`);
29
+ }
30
+ }
31
+ console.log(`\n Default level: ${config.defaultLevel}`);
32
+ }
33
+ else {
34
+ // Show global policies and summary of per-peer
35
+ console.log('\nGLOBAL POLICIES:\n');
36
+ if (Object.keys(config.globalPolicy).length === 0) {
37
+ console.log(' No global policies configured');
38
+ }
39
+ else {
40
+ for (const [topic, policy] of Object.entries(config.globalPolicy)) {
41
+ const notes = policy.notes ? ` - ${policy.notes}` : '';
42
+ console.log(` ${topic}: ${policy.level}${notes}`);
43
+ }
44
+ }
45
+ console.log(`\n Default level: ${config.defaultLevel}`);
46
+ console.log(` Activity logging: ${config.activityLog ? 'enabled' : 'disabled'}`);
47
+ // Show peers with custom policies
48
+ const peers = listPeers('approved');
49
+ const peersWithPolicies = peers.filter(p => p.responsePolicy && Object.keys(p.responsePolicy).length > 0);
50
+ if (peersWithPolicies.length > 0) {
51
+ console.log('\nPEER-SPECIFIC POLICIES:\n');
52
+ for (const peer of peersWithPolicies) {
53
+ console.log(` ${peer.displayName} (${peer.id}):`);
54
+ for (const [topic, policy] of Object.entries(peer.responsePolicy)) {
55
+ console.log(` ${topic}: ${policy.level}`);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ console.log('');
61
+ }
62
+ export function configurePolicies(peerIds, options) {
63
+ const level = options.level || 'summary';
64
+ const topics = options.topics?.split(',').map(t => t.trim()) || [];
65
+ const notes = options.notes;
66
+ if (options.global) {
67
+ // Configure global policies
68
+ if (topics.length === 0) {
69
+ console.error('Error: --topics is required');
70
+ return;
71
+ }
72
+ for (const topic of topics) {
73
+ setGlobalTopicPolicy(topic, level, notes);
74
+ }
75
+ console.log(`\nUpdated global policies:`);
76
+ for (const topic of topics) {
77
+ console.log(` ${topic}: ${level}`);
78
+ }
79
+ console.log('');
80
+ return;
81
+ }
82
+ if (!peerIds) {
83
+ console.error('Error: Specify peer ID(s) or use --global');
84
+ return;
85
+ }
86
+ if (topics.length === 0) {
87
+ console.error('Error: --topics is required');
88
+ return;
89
+ }
90
+ // Parse peer IDs (comma-separated)
91
+ const ids = peerIds.split(',').map(id => id.trim());
92
+ const results = [];
93
+ for (const id of ids) {
94
+ // Try to find peer by ID or display name
95
+ const peer = findPeerByIdOrName(id);
96
+ if (!peer) {
97
+ results.push({ peer: id, success: false });
98
+ continue;
99
+ }
100
+ for (const topic of topics) {
101
+ setPeerTopicPolicy(peer.id, topic, level, notes);
102
+ }
103
+ results.push({ peer: peer.displayName, success: true });
104
+ }
105
+ console.log('\nConfiguration results:');
106
+ for (const r of results) {
107
+ if (r.success) {
108
+ console.log(` ✓ ${r.peer}: configured ${topics.join(', ')} as ${level}`);
109
+ }
110
+ else {
111
+ console.log(` ✗ ${r.peer}: peer not found`);
112
+ }
113
+ }
114
+ console.log('');
115
+ }
116
+ /**
117
+ * Add a topic to a peer's policy
118
+ */
119
+ export function addTopic(peerId, topic, level, notes) {
120
+ const peer = findPeerByIdOrName(peerId);
121
+ if (!peer) {
122
+ console.error(`Peer not found: ${peerId}`);
123
+ return;
124
+ }
125
+ setPeerTopicPolicy(peer.id, topic, level, notes);
126
+ console.log(`\nAdded topic '${topic}' with level '${level}' for ${peer.displayName}\n`);
127
+ }
128
+ /**
129
+ * Remove a topic from a peer's policy
130
+ */
131
+ export function removeTopic(peerId, topic) {
132
+ const peer = findPeerByIdOrName(peerId);
133
+ if (!peer) {
134
+ console.error(`Peer not found: ${peerId}`);
135
+ return;
136
+ }
137
+ removePeerTopicPolicy(peer.id, topic);
138
+ console.log(`\nRemoved topic '${topic}' from ${peer.displayName}'s policy\n`);
139
+ }
140
+ /**
141
+ * Reset a peer's policy to global defaults
142
+ */
143
+ export function resetPolicy(peerId) {
144
+ const peer = findPeerByIdOrName(peerId);
145
+ if (!peer) {
146
+ console.error(`Peer not found: ${peerId}`);
147
+ return;
148
+ }
149
+ clearPeerResponsePolicy(peer.id);
150
+ console.log(`\nReset ${peer.displayName}'s policy to global defaults\n`);
151
+ }
152
+ /**
153
+ * Show activity log
154
+ */
155
+ export function showActivity(peerId, last) {
156
+ const lines = readActivityLog({ peerId, last: last || 50 });
157
+ if (lines.length === 0) {
158
+ console.log('\nNo activity logged yet.\n');
159
+ return;
160
+ }
161
+ console.log('\nAGENT-COMMS ACTIVITY:\n');
162
+ for (const line of lines) {
163
+ console.log(` ${line}`);
164
+ }
165
+ console.log('');
166
+ }
167
+ /**
168
+ * Clear activity log
169
+ */
170
+ export function clearActivity() {
171
+ clearActivityLog();
172
+ console.log('\nActivity log cleared.\n');
173
+ }
174
+ /**
175
+ * Set default response level
176
+ */
177
+ export function setDefault(level) {
178
+ setDefaultLevel(level);
179
+ console.log(`\nDefault response level set to: ${level}\n`);
180
+ }
181
+ /**
182
+ * Enable/disable activity logging
183
+ */
184
+ export function setLogging(enabled) {
185
+ setActivityLogging(enabled);
186
+ console.log(`\nActivity logging: ${enabled ? 'enabled' : 'disabled'}\n`);
187
+ }
188
+ /**
189
+ * Helper: Find peer by ID or display name
190
+ */
191
+ function findPeerByIdOrName(idOrName) {
192
+ // Try exact ID match first
193
+ let peer = getPeer(idOrName);
194
+ if (peer)
195
+ return peer;
196
+ // Try partial ID match
197
+ const peers = listPeers('approved');
198
+ peer = peers.find(p => p.id.includes(idOrName)) || null;
199
+ if (peer)
200
+ return peer;
201
+ // Try display name match (case-insensitive)
202
+ const lowerName = idOrName.toLowerCase();
203
+ peer = peers.find(p => p.displayName.toLowerCase().includes(lowerName)) || null;
204
+ return peer;
205
+ }
206
+ /**
207
+ * Interactive peer selection (returns peer IDs)
208
+ */
209
+ export function listPeersForSelection() {
210
+ const peers = listPeers('approved');
211
+ return peers.map(p => ({
212
+ id: p.id,
213
+ name: p.displayName,
214
+ hasPolicy: !!(p.responsePolicy && Object.keys(p.responsePolicy).length > 0)
215
+ }));
216
+ }
217
+ //# sourceMappingURL=agent-comms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-comms.js","sourceRoot":"","sources":["../../src/cli/agent-comms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function expose(method?: 'cloudflared' | 'ngrok', background?: boolean): Promise<void>;
2
+ export declare function stopExpose(): void;
3
+ //# sourceMappingURL=expose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expose.d.ts","sourceRoot":"","sources":["../../src/cli/expose.ts"],"names":[],"mappings":"AAQA,wBAAsB,MAAM,CAAC,MAAM,GAAE,aAAa,GAAG,OAAuB,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/G;AAED,wBAAgB,UAAU,IAAI,IAAI,CAgCjC"}
@@ -0,0 +1,104 @@
1
+ import { spawn } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { requireConfig, getConfigDir } from '../shared/config.js';
5
+ const TUNNEL_PID_FILE = path.join(getConfigDir(), 'tunnel.pid');
6
+ const TUNNEL_LOG_FILE = path.join(getConfigDir(), 'tunnel.log');
7
+ export async function expose(method = 'cloudflared', background = false) {
8
+ const config = requireConfig();
9
+ console.log(`Exposing OGP daemon on port ${config.daemonPort}...`);
10
+ if (method === 'cloudflared') {
11
+ await exposeCloudflared(config.daemonPort, background);
12
+ }
13
+ else if (method === 'ngrok') {
14
+ await exposeNgrok(config.daemonPort, background);
15
+ }
16
+ }
17
+ export function stopExpose() {
18
+ if (!fs.existsSync(TUNNEL_PID_FILE)) {
19
+ console.log('No tunnel is running');
20
+ return;
21
+ }
22
+ try {
23
+ const pidStr = fs.readFileSync(TUNNEL_PID_FILE, 'utf-8').trim();
24
+ const pid = parseInt(pidStr, 10);
25
+ if (isNaN(pid)) {
26
+ console.error('Invalid PID in tunnel.pid file');
27
+ fs.unlinkSync(TUNNEL_PID_FILE);
28
+ return;
29
+ }
30
+ // Check if process is running
31
+ try {
32
+ process.kill(pid, 0);
33
+ }
34
+ catch (error) {
35
+ console.log('Tunnel is not running (stale PID file)');
36
+ fs.unlinkSync(TUNNEL_PID_FILE);
37
+ return;
38
+ }
39
+ // Send SIGTERM
40
+ process.kill(pid, 'SIGTERM');
41
+ fs.unlinkSync(TUNNEL_PID_FILE);
42
+ console.log('Tunnel stopped');
43
+ }
44
+ catch (error) {
45
+ console.error('Failed to stop tunnel:', error);
46
+ }
47
+ }
48
+ async function exposeCloudflared(port, background) {
49
+ console.log('Starting cloudflared tunnel...');
50
+ console.log('Install cloudflared: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/\n');
51
+ if (background) {
52
+ const logStream = fs.openSync(TUNNEL_LOG_FILE, 'a');
53
+ const proc = spawn('cloudflared', ['tunnel', '--url', `http://localhost:${port}`], {
54
+ detached: true,
55
+ stdio: ['ignore', logStream, logStream]
56
+ });
57
+ proc.unref();
58
+ fs.writeFileSync(TUNNEL_PID_FILE, proc.pid.toString(), 'utf-8');
59
+ console.log(`Cloudflared tunnel started (PID: ${proc.pid})`);
60
+ console.log(`Logs: ${TUNNEL_LOG_FILE}`);
61
+ console.log('Run "ogp expose stop" to stop the tunnel');
62
+ }
63
+ else {
64
+ const proc = spawn('cloudflared', ['tunnel', '--url', `http://localhost:${port}`], {
65
+ stdio: 'inherit'
66
+ });
67
+ proc.on('error', (error) => {
68
+ console.error('Failed to start cloudflared:', error);
69
+ console.log('Make sure cloudflared is installed and in your PATH');
70
+ });
71
+ proc.on('close', (code) => {
72
+ console.log(`cloudflared exited with code ${code}`);
73
+ });
74
+ }
75
+ }
76
+ async function exposeNgrok(port, background) {
77
+ console.log('Starting ngrok tunnel...');
78
+ console.log('Install ngrok: https://ngrok.com/download\n');
79
+ if (background) {
80
+ const logStream = fs.openSync(TUNNEL_LOG_FILE, 'a');
81
+ const proc = spawn('ngrok', ['http', port.toString()], {
82
+ detached: true,
83
+ stdio: ['ignore', logStream, logStream]
84
+ });
85
+ proc.unref();
86
+ fs.writeFileSync(TUNNEL_PID_FILE, proc.pid.toString(), 'utf-8');
87
+ console.log(`Ngrok tunnel started (PID: ${proc.pid})`);
88
+ console.log(`Logs: ${TUNNEL_LOG_FILE}`);
89
+ console.log('Run "ogp expose stop" to stop the tunnel');
90
+ }
91
+ else {
92
+ const proc = spawn('ngrok', ['http', port.toString()], {
93
+ stdio: 'inherit'
94
+ });
95
+ proc.on('error', (error) => {
96
+ console.error('Failed to start ngrok:', error);
97
+ console.log('Make sure ngrok is installed and in your PATH');
98
+ });
99
+ proc.on('close', (code) => {
100
+ console.log(`ngrok exited with code ${code}`);
101
+ });
102
+ }
103
+ }
104
+ //# sourceMappingURL=expose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expose.js","sourceRoot":"","sources":["../../src/cli/expose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export declare function federationList(status?: 'pending' | 'approved' | 'rejected'): Promise<void>;
2
+ export declare function federationRequest(peerUrl: string, peerId: string): Promise<void>;
3
+ export interface ApproveOptions {
4
+ intents?: string[];
5
+ rate?: string;
6
+ topics?: string[];
7
+ }
8
+ export declare function federationApprove(peerId: string, options?: ApproveOptions): Promise<void>;
9
+ export declare function federationReject(peerId: string): Promise<void>;
10
+ export declare function federationSend(peerId: string, intent: string, payloadJson: string): Promise<void>;
11
+ /**
12
+ * Show scope grants for a peer
13
+ */
14
+ export declare function federationShowScopes(peerId: string): Promise<void>;
15
+ /**
16
+ * Update scope grants for an existing peer
17
+ */
18
+ export declare function federationUpdateGrants(peerId: string, options: ApproveOptions): Promise<void>;
19
+ /**
20
+ * Send an agent-comms message to a peer
21
+ */
22
+ export declare function federationSendAgentComms(peerId: string, topic: string, messageText: string, options?: {
23
+ priority?: 'low' | 'normal' | 'high';
24
+ conversationId?: string;
25
+ waitForReply?: boolean;
26
+ replyTimeout?: number;
27
+ }): Promise<void>;
28
+ //# sourceMappingURL=federation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../src/cli/federation.ts"],"names":[],"mappings":"AAgBA,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhG;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEtF;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEnG;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBpE;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDxE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,OAAO,CAAC,IAAI,CAAC,CAkGf"}