@dp-pcs/ogp 0.2.0 → 0.2.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.
@@ -0,0 +1,9 @@
1
+ interface RegisterOptions {
2
+ script?: string;
3
+ description: string;
4
+ }
5
+ export declare function registerNewIntent(name: string, options: RegisterOptions): void;
6
+ export declare function listRegisteredIntents(): void;
7
+ export declare function removeIntent(name: string): void;
8
+ export {};
9
+ //# sourceMappingURL=intent-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-registry.d.ts","sourceRoot":"","sources":["../../src/cli/intent-registry.ts"],"names":[],"mappings":"AAKA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CA4D9E;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAwB5C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA0B/C"}
@@ -0,0 +1,101 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { registerIntent, removeIntent as removeIntentFromRegistry, listIntents, getIntent } from '../daemon/intent-registry.js';
4
+ export function registerNewIntent(name, options) {
5
+ // Validation
6
+ if (!name || name.trim() === '') {
7
+ console.error('Error: Intent name is required');
8
+ process.exit(1);
9
+ }
10
+ if (!options.description || options.description.trim() === '') {
11
+ console.error('Error: Description is required');
12
+ process.exit(1);
13
+ }
14
+ if (options.script && !fs.existsSync(options.script)) {
15
+ console.error(`Error: Script file not found: ${options.script}`);
16
+ process.exit(1);
17
+ }
18
+ if (options.script && !fs.statSync(options.script).isFile()) {
19
+ console.error(`Error: Script path must be a file: ${options.script}`);
20
+ process.exit(1);
21
+ }
22
+ // Make script path absolute if provided
23
+ const scriptPath = options.script ? path.resolve(options.script) : undefined;
24
+ // Check if script is executable (if provided)
25
+ if (scriptPath) {
26
+ try {
27
+ fs.accessSync(scriptPath, fs.constants.X_OK);
28
+ }
29
+ catch {
30
+ console.error(`Error: Script is not executable: ${scriptPath}`);
31
+ console.error('Run: chmod +x ' + scriptPath);
32
+ process.exit(1);
33
+ }
34
+ }
35
+ // Check if intent already exists
36
+ const existing = getIntent(name);
37
+ if (existing) {
38
+ console.log(`Intent "${name}" already exists. Updating...`);
39
+ }
40
+ const intent = {
41
+ name,
42
+ description: options.description,
43
+ handler: scriptPath
44
+ };
45
+ registerIntent(intent);
46
+ if (existing) {
47
+ console.log(`✓ Intent updated: ${name}`);
48
+ }
49
+ else {
50
+ console.log(`✓ Intent registered: ${name}`);
51
+ }
52
+ console.log(` Description: ${options.description}`);
53
+ if (scriptPath) {
54
+ console.log(` Script: ${scriptPath}`);
55
+ }
56
+ }
57
+ export function listRegisteredIntents() {
58
+ const intents = listIntents();
59
+ if (intents.length === 0) {
60
+ console.log('No intents registered.');
61
+ return;
62
+ }
63
+ console.log('\nREGISTERED INTENTS:\n');
64
+ intents.forEach(intent => {
65
+ console.log(` ${intent.name}`);
66
+ console.log(` Description: ${intent.description}`);
67
+ if (intent.handler) {
68
+ console.log(` Handler: ${intent.handler}`);
69
+ }
70
+ if (intent.schema) {
71
+ console.log(` Schema: ${JSON.stringify(intent.schema, null, 6).split('\n').map(line => ' ' + line).join('\n').trim()}`);
72
+ }
73
+ console.log('');
74
+ });
75
+ }
76
+ export function removeIntent(name) {
77
+ if (!name || name.trim() === '') {
78
+ console.error('Error: Intent name is required');
79
+ process.exit(1);
80
+ }
81
+ const intent = getIntent(name);
82
+ if (!intent) {
83
+ console.error(`Error: Intent "${name}" not found`);
84
+ process.exit(1);
85
+ }
86
+ // Prevent removing default intents
87
+ const defaultIntents = ['message', 'task-request', 'status-update', 'agent-comms'];
88
+ if (defaultIntents.includes(name)) {
89
+ console.error(`Error: Cannot remove built-in intent: ${name}`);
90
+ process.exit(1);
91
+ }
92
+ const success = removeIntentFromRegistry(name);
93
+ if (success) {
94
+ console.log(`✓ Intent removed: ${name}`);
95
+ }
96
+ else {
97
+ console.error(`Error: Failed to remove intent: ${name}`);
98
+ process.exit(1);
99
+ }
100
+ }
101
+ //# sourceMappingURL=intent-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-registry.js","sourceRoot":"","sources":["../../src/cli/intent-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ interface ProjectJoinOptions {
2
+ description?: string;
3
+ create?: boolean;
4
+ }
5
+ interface ProjectContributeOptions {
6
+ metadata?: string;
7
+ }
8
+ interface ProjectQueryOptions {
9
+ topic?: string;
10
+ author?: string;
11
+ limit?: number;
12
+ search?: string;
13
+ }
14
+ /**
15
+ * Create a new project locally
16
+ */
17
+ export declare function projectCreate(projectId: string, projectName: string, options?: {
18
+ description?: string;
19
+ }): Promise<void>;
20
+ /**
21
+ * Join an existing project (local or request federation)
22
+ */
23
+ export declare function projectJoin(projectId: string, projectName?: string, options?: ProjectJoinOptions): Promise<void>;
24
+ /**
25
+ * List all projects
26
+ */
27
+ export declare function projectList(): Promise<void>;
28
+ /**
29
+ * Contribute to a project topic
30
+ */
31
+ export declare function projectContribute(projectId: string, topic: string, summary: string, options?: ProjectContributeOptions): Promise<void>;
32
+ /**
33
+ * Query project contributions
34
+ */
35
+ export declare function projectQuery(projectId: string, options?: ProjectQueryOptions): Promise<void>;
36
+ /**
37
+ * Get project status overview
38
+ */
39
+ export declare function projectStatus(projectId: string): Promise<void>;
40
+ /**
41
+ * Request to join a project from a peer
42
+ */
43
+ export declare function projectRequestJoin(peerId: string, projectId: string, projectName: string, options?: {
44
+ description?: string;
45
+ }): Promise<void>;
46
+ /**
47
+ * Send a project contribution to peers
48
+ */
49
+ export declare function projectSendContribution(peerId: string, projectId: string, topic: string, summary: string, options?: ProjectContributeOptions): Promise<void>;
50
+ /**
51
+ * Query a peer's project contributions
52
+ */
53
+ export declare function projectQueryPeer(peerId: string, projectId: string, options?: Omit<ProjectQueryOptions, 'search'>): Promise<void>;
54
+ /**
55
+ * Request project status from a peer
56
+ */
57
+ export declare function projectStatusPeer(peerId: string, projectId: string): Promise<void>;
58
+ export {};
59
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/cli/project.ts"],"names":[],"mappings":"AAmBA,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,wBAAwB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBjD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCpE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAM,GAChD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
@@ -0,0 +1,379 @@
1
+ import { createProject, addProject, getProject, listProjects, joinProject, isProjectMember, contributeToProject, getTopicContributions, getAuthorContributions, searchContributions, getProjectStatus, ensureProjectTopic } from '../daemon/projects.js';
2
+ import { loadConfig } from '../shared/config.js';
3
+ import { getPeer } from '../daemon/peers.js';
4
+ import { federationSend } from './federation.js';
5
+ /**
6
+ * Create a new project locally
7
+ */
8
+ export async function projectCreate(projectId, projectName, options = {}) {
9
+ // Check if project already exists
10
+ const existing = getProject(projectId);
11
+ if (existing) {
12
+ console.error(`Error: Project '${projectId}' already exists`);
13
+ process.exit(1);
14
+ }
15
+ // Create the project
16
+ const project = createProject(projectId, projectName, options.description);
17
+ // Add current user as first member
18
+ const config = loadConfig();
19
+ if (config?.email) {
20
+ project.members.push(config.email);
21
+ }
22
+ addProject(project);
23
+ console.log(`✓ Created project: ${projectName} (${projectId})`);
24
+ if (options.description) {
25
+ console.log(` Description: ${options.description}`);
26
+ }
27
+ console.log(` Members: ${project.members.join(', ')}`);
28
+ }
29
+ /**
30
+ * Join an existing project (local or request federation)
31
+ */
32
+ export async function projectJoin(projectId, projectName, options = {}) {
33
+ const config = loadConfig();
34
+ if (!config) {
35
+ console.error('Error: Not configured. Run "ogp setup" first.');
36
+ process.exit(1);
37
+ }
38
+ // Check if project exists locally
39
+ let project = getProject(projectId);
40
+ if (!project && options.create) {
41
+ // Create project locally if --create flag is used
42
+ if (!projectName) {
43
+ console.error('Error: --create requires a project name');
44
+ process.exit(1);
45
+ }
46
+ project = createProject(projectId, projectName, options.description);
47
+ project.members.push(config.email);
48
+ addProject(project);
49
+ console.log(`✓ Created and joined project: ${projectName} (${projectId})`);
50
+ return;
51
+ }
52
+ if (!project) {
53
+ console.error(`Error: Project '${projectId}' not found locally.`);
54
+ console.log('Use --create to create a new project, or request to join from a peer.');
55
+ process.exit(1);
56
+ }
57
+ // Check if already a member
58
+ if (isProjectMember(projectId, config.email)) {
59
+ console.log(`You are already a member of project '${project.name}'`);
60
+ return;
61
+ }
62
+ // Join the project
63
+ const success = joinProject(projectId, config.email);
64
+ if (success) {
65
+ console.log(`✓ Joined project: ${project.name} (${projectId})`);
66
+ }
67
+ else {
68
+ console.error('Error: Failed to join project');
69
+ process.exit(1);
70
+ }
71
+ }
72
+ /**
73
+ * List all projects
74
+ */
75
+ export async function projectList() {
76
+ const projects = listProjects();
77
+ if (projects.length === 0) {
78
+ console.log('No projects found');
79
+ return;
80
+ }
81
+ console.log(`Found ${projects.length} project(s):\n`);
82
+ for (const project of projects) {
83
+ console.log(`${project.name} (${project.id})`);
84
+ if (project.description) {
85
+ console.log(` Description: ${project.description}`);
86
+ }
87
+ console.log(` Members: ${project.members.length}`);
88
+ console.log(` Topics: ${project.topics.length}`);
89
+ console.log(` Created: ${new Date(project.createdAt).toLocaleString()}`);
90
+ console.log(` Updated: ${new Date(project.updatedAt).toLocaleString()}`);
91
+ console.log();
92
+ }
93
+ }
94
+ /**
95
+ * Contribute to a project topic
96
+ */
97
+ export async function projectContribute(projectId, topic, summary, options = {}) {
98
+ const config = loadConfig();
99
+ if (!config) {
100
+ console.error('Error: Not configured. Run "ogp setup" first.');
101
+ process.exit(1);
102
+ }
103
+ const project = getProject(projectId);
104
+ if (!project) {
105
+ console.error(`Error: Project '${projectId}' not found`);
106
+ process.exit(1);
107
+ }
108
+ if (!isProjectMember(projectId, config.email)) {
109
+ console.error(`Error: You are not a member of project '${project.name}'`);
110
+ process.exit(1);
111
+ }
112
+ // Parse metadata if provided
113
+ let metadata;
114
+ if (options.metadata) {
115
+ try {
116
+ metadata = JSON.parse(options.metadata);
117
+ }
118
+ catch (err) {
119
+ console.error('Error: Invalid JSON in --metadata');
120
+ process.exit(1);
121
+ }
122
+ }
123
+ // Ensure the topic exists
124
+ ensureProjectTopic(projectId, topic);
125
+ // Add the contribution
126
+ const contributionId = contributeToProject(projectId, topic, config.email, summary, metadata);
127
+ if (contributionId) {
128
+ console.log(`✓ Contributed to project '${project.name}' topic '${topic}'`);
129
+ console.log(` Summary: ${summary}`);
130
+ if (metadata) {
131
+ console.log(` Metadata: ${JSON.stringify(metadata, null, 2)}`);
132
+ }
133
+ console.log(` Contribution ID: ${contributionId}`);
134
+ }
135
+ else {
136
+ console.error('Error: Failed to add contribution');
137
+ process.exit(1);
138
+ }
139
+ }
140
+ /**
141
+ * Query project contributions
142
+ */
143
+ export async function projectQuery(projectId, options = {}) {
144
+ const project = getProject(projectId);
145
+ if (!project) {
146
+ console.error(`Error: Project '${projectId}' not found`);
147
+ process.exit(1);
148
+ }
149
+ const limit = options.limit || 20;
150
+ let contributions;
151
+ if (options.search) {
152
+ // Search by text
153
+ contributions = searchContributions(projectId, options.search, limit);
154
+ console.log(`Search results for "${options.search}" in project '${project.name}':`);
155
+ }
156
+ else if (options.topic) {
157
+ // Query by topic
158
+ contributions = getTopicContributions(projectId, options.topic, limit);
159
+ console.log(`Contributions to topic '${options.topic}' in project '${project.name}':`);
160
+ }
161
+ else if (options.author) {
162
+ // Query by author
163
+ contributions = getAuthorContributions(projectId, options.author, limit);
164
+ console.log(`Contributions by '${options.author}' in project '${project.name}':`);
165
+ }
166
+ else {
167
+ // Get all recent contributions - handle both data formats
168
+ contributions = [];
169
+ // Check if this project uses the new nested format (topics as objects)
170
+ if (project.topics.length > 0 && typeof project.topics[0] === 'object') {
171
+ // New nested format: topics are objects with contributions
172
+ for (const topic of project.topics) {
173
+ contributions.push(...topic.contributions);
174
+ }
175
+ }
176
+ else {
177
+ // Old flat format: contributions are in flat array
178
+ contributions = project.contributions || [];
179
+ }
180
+ contributions.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
181
+ contributions = contributions.slice(0, limit);
182
+ console.log(`Recent contributions in project '${project.name}':`);
183
+ }
184
+ if (contributions.length === 0) {
185
+ console.log('No contributions found');
186
+ return;
187
+ }
188
+ console.log();
189
+ for (const contrib of contributions) {
190
+ console.log(`[${new Date(contrib.timestamp).toLocaleString()}] ${contrib.authorId}`);
191
+ console.log(` Topic: ${contrib.topic}`);
192
+ console.log(` Summary: ${contrib.summary}`);
193
+ if (contrib.metadata) {
194
+ console.log(` Metadata: ${JSON.stringify(contrib.metadata, null, 2)}`);
195
+ }
196
+ console.log();
197
+ }
198
+ }
199
+ /**
200
+ * Get project status overview
201
+ */
202
+ export async function projectStatus(projectId) {
203
+ const statusData = getProjectStatus(projectId);
204
+ if (!statusData) {
205
+ console.error(`Error: Project '${projectId}' not found`);
206
+ process.exit(1);
207
+ }
208
+ const { project, topics } = statusData;
209
+ console.log(`Project: ${project.name} (${project.id})`);
210
+ if (project.description) {
211
+ console.log(`Description: ${project.description}`);
212
+ }
213
+ console.log(`Members: ${project.members.join(', ')}`);
214
+ console.log(`Created: ${new Date(project.createdAt).toLocaleString()}`);
215
+ console.log(`Updated: ${new Date(project.updatedAt).toLocaleString()}`);
216
+ console.log();
217
+ if (topics.length === 0) {
218
+ console.log('No topics found in this project');
219
+ return;
220
+ }
221
+ console.log(`Topics (${topics.length}):`);
222
+ console.log();
223
+ for (const topic of topics) {
224
+ console.log(`${topic.name}`);
225
+ if (topic.description) {
226
+ console.log(` Description: ${topic.description}`);
227
+ }
228
+ console.log(` Contributions: ${topic.contributionCount}`);
229
+ console.log(` Contributors: ${topic.contributors.join(', ')}`);
230
+ if (topic.lastContribution) {
231
+ console.log(` Last activity: ${new Date(topic.lastContribution.timestamp).toLocaleString()}`);
232
+ console.log(` by ${topic.lastContribution.authorId}: ${topic.lastContribution.summary}`);
233
+ }
234
+ console.log();
235
+ }
236
+ }
237
+ /**
238
+ * Request to join a project from a peer
239
+ */
240
+ export async function projectRequestJoin(peerId, projectId, projectName, options = {}) {
241
+ const config = loadConfig();
242
+ if (!config) {
243
+ console.error('Error: Not configured. Run "ogp setup" first.');
244
+ process.exit(1);
245
+ }
246
+ const peer = getPeer(peerId);
247
+ if (!peer) {
248
+ console.error(`Error: Peer '${peerId}' not found`);
249
+ process.exit(1);
250
+ }
251
+ if (peer.status !== 'approved') {
252
+ console.error(`Error: Peer '${peerId}' is not approved for federation`);
253
+ process.exit(1);
254
+ }
255
+ const payload = {
256
+ projectId,
257
+ projectName,
258
+ ...(options.description && { projectDescription: options.description })
259
+ };
260
+ console.log(`Requesting to join project '${projectName}' from peer '${peerId}'...`);
261
+ try {
262
+ await federationSend(peerId, 'project.join', JSON.stringify(payload));
263
+ console.log(`✓ Join request sent to peer '${peerId}'`);
264
+ }
265
+ catch (err) {
266
+ console.error('Error sending join request:', err);
267
+ process.exit(1);
268
+ }
269
+ }
270
+ /**
271
+ * Send a project contribution to peers
272
+ */
273
+ export async function projectSendContribution(peerId, projectId, topic, summary, options = {}) {
274
+ const config = loadConfig();
275
+ if (!config) {
276
+ console.error('Error: Not configured. Run "ogp setup" first.');
277
+ process.exit(1);
278
+ }
279
+ const peer = getPeer(peerId);
280
+ if (!peer) {
281
+ console.error(`Error: Peer '${peerId}' not found`);
282
+ process.exit(1);
283
+ }
284
+ if (peer.status !== 'approved') {
285
+ console.error(`Error: Peer '${peerId}' is not approved for federation`);
286
+ process.exit(1);
287
+ }
288
+ // Parse metadata if provided
289
+ let metadata;
290
+ if (options.metadata) {
291
+ try {
292
+ metadata = JSON.parse(options.metadata);
293
+ }
294
+ catch (err) {
295
+ console.error('Error: Invalid JSON in --metadata');
296
+ process.exit(1);
297
+ }
298
+ }
299
+ const payload = {
300
+ projectId,
301
+ topic,
302
+ summary,
303
+ ...(metadata && { metadata })
304
+ };
305
+ console.log(`Sending contribution to project '${projectId}' topic '${topic}' to peer '${peerId}'...`);
306
+ try {
307
+ await federationSend(peerId, 'project.contribute', JSON.stringify(payload));
308
+ console.log(`✓ Contribution sent to peer '${peerId}'`);
309
+ }
310
+ catch (err) {
311
+ console.error('Error sending contribution:', err);
312
+ process.exit(1);
313
+ }
314
+ }
315
+ /**
316
+ * Query a peer's project contributions
317
+ */
318
+ export async function projectQueryPeer(peerId, projectId, options = {}) {
319
+ const config = loadConfig();
320
+ if (!config) {
321
+ console.error('Error: Not configured. Run "ogp setup" first.');
322
+ process.exit(1);
323
+ }
324
+ const peer = getPeer(peerId);
325
+ if (!peer) {
326
+ console.error(`Error: Peer '${peerId}' not found`);
327
+ process.exit(1);
328
+ }
329
+ if (peer.status !== 'approved') {
330
+ console.error(`Error: Peer '${peerId}' is not approved for federation`);
331
+ process.exit(1);
332
+ }
333
+ const payload = { projectId };
334
+ if (options.topic)
335
+ payload.topic = options.topic;
336
+ if (options.author)
337
+ payload.authorId = options.author;
338
+ if (options.limit)
339
+ payload.limit = options.limit;
340
+ console.log(`Querying project '${projectId}' from peer '${peerId}'...`);
341
+ try {
342
+ await federationSend(peerId, 'project.query', JSON.stringify(payload));
343
+ console.log(`✓ Query sent to peer '${peerId}' - check for async response`);
344
+ }
345
+ catch (err) {
346
+ console.error('Error sending query:', err);
347
+ process.exit(1);
348
+ }
349
+ }
350
+ /**
351
+ * Request project status from a peer
352
+ */
353
+ export async function projectStatusPeer(peerId, projectId) {
354
+ const config = loadConfig();
355
+ if (!config) {
356
+ console.error('Error: Not configured. Run "ogp setup" first.');
357
+ process.exit(1);
358
+ }
359
+ const peer = getPeer(peerId);
360
+ if (!peer) {
361
+ console.error(`Error: Peer '${peerId}' not found`);
362
+ process.exit(1);
363
+ }
364
+ if (peer.status !== 'approved') {
365
+ console.error(`Error: Peer '${peerId}' is not approved for federation`);
366
+ process.exit(1);
367
+ }
368
+ const payload = { projectId };
369
+ console.log(`Requesting status for project '${projectId}' from peer '${peerId}'...`);
370
+ try {
371
+ await federationSend(peerId, 'project.status', JSON.stringify(payload));
372
+ console.log(`✓ Status request sent to peer '${peerId}' - check for async response`);
373
+ }
374
+ catch (err) {
375
+ console.error('Error sending status request:', err);
376
+ process.exit(1);
377
+ }
378
+ }
379
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/cli/project.ts"],"names":[],"mappings":"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"}