@rookdaemon/agora 0.2.8 → 0.2.9

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 (143) hide show
  1. package/dist/chunk-JUOGKXFN.js +1645 -0
  2. package/dist/chunk-JUOGKXFN.js.map +1 -0
  3. package/dist/cli.d.ts +0 -2
  4. package/dist/cli.js +1163 -1137
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.d.ts +1613 -30
  7. package/dist/index.js +1135 -29
  8. package/dist/index.js.map +1 -1
  9. package/package.json +4 -2
  10. package/dist/cli.d.ts.map +0 -1
  11. package/dist/config.d.ts +0 -59
  12. package/dist/config.d.ts.map +0 -1
  13. package/dist/config.js +0 -115
  14. package/dist/config.js.map +0 -1
  15. package/dist/discovery/bootstrap.d.ts +0 -32
  16. package/dist/discovery/bootstrap.d.ts.map +0 -1
  17. package/dist/discovery/bootstrap.js +0 -36
  18. package/dist/discovery/bootstrap.js.map +0 -1
  19. package/dist/discovery/peer-discovery.d.ts +0 -59
  20. package/dist/discovery/peer-discovery.d.ts.map +0 -1
  21. package/dist/discovery/peer-discovery.js +0 -108
  22. package/dist/discovery/peer-discovery.js.map +0 -1
  23. package/dist/identity/keypair.d.ts +0 -42
  24. package/dist/identity/keypair.d.ts.map +0 -1
  25. package/dist/identity/keypair.js +0 -83
  26. package/dist/identity/keypair.js.map +0 -1
  27. package/dist/index.d.ts.map +0 -1
  28. package/dist/message/envelope.d.ts +0 -59
  29. package/dist/message/envelope.d.ts.map +0 -1
  30. package/dist/message/envelope.js +0 -83
  31. package/dist/message/envelope.js.map +0 -1
  32. package/dist/message/types/paper-discovery.d.ts +0 -28
  33. package/dist/message/types/paper-discovery.d.ts.map +0 -1
  34. package/dist/message/types/paper-discovery.js +0 -2
  35. package/dist/message/types/paper-discovery.js.map +0 -1
  36. package/dist/message/types/peer-discovery.d.ts +0 -78
  37. package/dist/message/types/peer-discovery.d.ts.map +0 -1
  38. package/dist/message/types/peer-discovery.js +0 -90
  39. package/dist/message/types/peer-discovery.js.map +0 -1
  40. package/dist/peer/client.d.ts +0 -50
  41. package/dist/peer/client.d.ts.map +0 -1
  42. package/dist/peer/client.js +0 -138
  43. package/dist/peer/client.js.map +0 -1
  44. package/dist/peer/manager.d.ts +0 -65
  45. package/dist/peer/manager.d.ts.map +0 -1
  46. package/dist/peer/manager.js +0 -153
  47. package/dist/peer/manager.js.map +0 -1
  48. package/dist/peer/server.d.ts +0 -65
  49. package/dist/peer/server.d.ts.map +0 -1
  50. package/dist/peer/server.js +0 -154
  51. package/dist/peer/server.js.map +0 -1
  52. package/dist/registry/capability.d.ts +0 -44
  53. package/dist/registry/capability.d.ts.map +0 -1
  54. package/dist/registry/capability.js +0 -94
  55. package/dist/registry/capability.js.map +0 -1
  56. package/dist/registry/discovery-service.d.ts +0 -64
  57. package/dist/registry/discovery-service.d.ts.map +0 -1
  58. package/dist/registry/discovery-service.js +0 -129
  59. package/dist/registry/discovery-service.js.map +0 -1
  60. package/dist/registry/messages.d.ts +0 -105
  61. package/dist/registry/messages.d.ts.map +0 -1
  62. package/dist/registry/messages.js +0 -2
  63. package/dist/registry/messages.js.map +0 -1
  64. package/dist/registry/peer-store.d.ts +0 -57
  65. package/dist/registry/peer-store.d.ts.map +0 -1
  66. package/dist/registry/peer-store.js +0 -92
  67. package/dist/registry/peer-store.js.map +0 -1
  68. package/dist/registry/peer.d.ts +0 -20
  69. package/dist/registry/peer.d.ts.map +0 -1
  70. package/dist/registry/peer.js +0 -2
  71. package/dist/registry/peer.js.map +0 -1
  72. package/dist/relay/client.d.ts +0 -112
  73. package/dist/relay/client.d.ts.map +0 -1
  74. package/dist/relay/client.js +0 -281
  75. package/dist/relay/client.js.map +0 -1
  76. package/dist/relay/jwt-auth.d.ts +0 -40
  77. package/dist/relay/jwt-auth.d.ts.map +0 -1
  78. package/dist/relay/jwt-auth.js +0 -109
  79. package/dist/relay/jwt-auth.js.map +0 -1
  80. package/dist/relay/message-buffer.d.ts +0 -41
  81. package/dist/relay/message-buffer.d.ts.map +0 -1
  82. package/dist/relay/message-buffer.js +0 -53
  83. package/dist/relay/message-buffer.js.map +0 -1
  84. package/dist/relay/rest-api.d.ts +0 -68
  85. package/dist/relay/rest-api.d.ts.map +0 -1
  86. package/dist/relay/rest-api.js +0 -225
  87. package/dist/relay/rest-api.js.map +0 -1
  88. package/dist/relay/run-relay.d.ts +0 -33
  89. package/dist/relay/run-relay.d.ts.map +0 -1
  90. package/dist/relay/run-relay.js +0 -57
  91. package/dist/relay/run-relay.js.map +0 -1
  92. package/dist/relay/server.d.ts +0 -91
  93. package/dist/relay/server.d.ts.map +0 -1
  94. package/dist/relay/server.js +0 -385
  95. package/dist/relay/server.js.map +0 -1
  96. package/dist/relay/store.d.ts +0 -19
  97. package/dist/relay/store.d.ts.map +0 -1
  98. package/dist/relay/store.js +0 -55
  99. package/dist/relay/store.js.map +0 -1
  100. package/dist/relay/types.d.ts +0 -35
  101. package/dist/relay/types.d.ts.map +0 -1
  102. package/dist/relay/types.js +0 -2
  103. package/dist/relay/types.js.map +0 -1
  104. package/dist/reputation/commit-reveal.d.ts +0 -45
  105. package/dist/reputation/commit-reveal.d.ts.map +0 -1
  106. package/dist/reputation/commit-reveal.js +0 -125
  107. package/dist/reputation/commit-reveal.js.map +0 -1
  108. package/dist/reputation/scoring.d.ts +0 -31
  109. package/dist/reputation/scoring.d.ts.map +0 -1
  110. package/dist/reputation/scoring.js +0 -105
  111. package/dist/reputation/scoring.js.map +0 -1
  112. package/dist/reputation/store.d.ts +0 -83
  113. package/dist/reputation/store.d.ts.map +0 -1
  114. package/dist/reputation/store.js +0 -202
  115. package/dist/reputation/store.js.map +0 -1
  116. package/dist/reputation/types.d.ts +0 -150
  117. package/dist/reputation/types.d.ts.map +0 -1
  118. package/dist/reputation/types.js +0 -113
  119. package/dist/reputation/types.js.map +0 -1
  120. package/dist/reputation/verification.d.ts +0 -28
  121. package/dist/reputation/verification.d.ts.map +0 -1
  122. package/dist/reputation/verification.js +0 -91
  123. package/dist/reputation/verification.js.map +0 -1
  124. package/dist/service.d.ts +0 -90
  125. package/dist/service.d.ts.map +0 -1
  126. package/dist/service.js +0 -176
  127. package/dist/service.js.map +0 -1
  128. package/dist/transport/http.d.ts +0 -41
  129. package/dist/transport/http.d.ts.map +0 -1
  130. package/dist/transport/http.js +0 -103
  131. package/dist/transport/http.js.map +0 -1
  132. package/dist/transport/peer-config.d.ts +0 -38
  133. package/dist/transport/peer-config.d.ts.map +0 -1
  134. package/dist/transport/peer-config.js +0 -41
  135. package/dist/transport/peer-config.js.map +0 -1
  136. package/dist/transport/relay.d.ts +0 -30
  137. package/dist/transport/relay.d.ts.map +0 -1
  138. package/dist/transport/relay.js +0 -85
  139. package/dist/transport/relay.js.map +0 -1
  140. package/dist/utils.d.ts +0 -40
  141. package/dist/utils.d.ts.map +0 -1
  142. package/dist/utils.js +0 -59
  143. package/dist/utils.js.map +0 -1
@@ -1,94 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- /**
3
- * Deterministic JSON serialization for capability hashing.
4
- * Recursively sorts object keys.
5
- */
6
- function stableStringify(value) {
7
- if (value === null || value === undefined)
8
- return JSON.stringify(value);
9
- if (typeof value !== 'object')
10
- return JSON.stringify(value);
11
- if (Array.isArray(value)) {
12
- return '[' + value.map(stableStringify).join(',') + ']';
13
- }
14
- const keys = Object.keys(value).sort();
15
- const pairs = keys.map(k => JSON.stringify(k) + ':' + stableStringify(value[k]));
16
- return '{' + pairs.join(',') + '}';
17
- }
18
- /**
19
- * Compute content-addressed ID for a capability based on name, version, and schemas.
20
- */
21
- function computeCapabilityId(name, version, inputSchema, outputSchema) {
22
- const data = {
23
- name,
24
- version,
25
- ...(inputSchema !== undefined ? { inputSchema } : {}),
26
- ...(outputSchema !== undefined ? { outputSchema } : {}),
27
- };
28
- const canonical = stableStringify(data);
29
- return createHash('sha256').update(canonical).digest('hex');
30
- }
31
- /**
32
- * Creates a capability with a content-addressed ID.
33
- *
34
- * @param name - Human-readable capability name
35
- * @param version - Semantic version string
36
- * @param description - Description of what the capability does
37
- * @param options - Optional input/output schemas and tags
38
- * @returns A Capability object with computed ID
39
- */
40
- export function createCapability(name, version, description, options = {}) {
41
- const { inputSchema, outputSchema, tags = [] } = options;
42
- const id = computeCapabilityId(name, version, inputSchema, outputSchema);
43
- return {
44
- id,
45
- name,
46
- version,
47
- description,
48
- ...(inputSchema !== undefined ? { inputSchema } : {}),
49
- ...(outputSchema !== undefined ? { outputSchema } : {}),
50
- tags,
51
- };
52
- }
53
- /**
54
- * Validates that a capability has all required fields.
55
- *
56
- * @param capability - The capability to validate
57
- * @returns Object with `valid` boolean and optional `errors` array
58
- */
59
- export function validateCapability(capability) {
60
- const errors = [];
61
- if (!capability || typeof capability !== 'object') {
62
- return { valid: false, errors: ['Capability must be an object'] };
63
- }
64
- const cap = capability;
65
- if (!cap.id || typeof cap.id !== 'string') {
66
- errors.push('Missing or invalid field: id (must be a string)');
67
- }
68
- if (!cap.name || typeof cap.name !== 'string') {
69
- errors.push('Missing or invalid field: name (must be a string)');
70
- }
71
- if (!cap.version || typeof cap.version !== 'string') {
72
- errors.push('Missing or invalid field: version (must be a string)');
73
- }
74
- if (!cap.description || typeof cap.description !== 'string') {
75
- errors.push('Missing or invalid field: description (must be a string)');
76
- }
77
- if (!Array.isArray(cap.tags)) {
78
- errors.push('Missing or invalid field: tags (must be an array)');
79
- }
80
- else if (!cap.tags.every(tag => typeof tag === 'string')) {
81
- errors.push('Invalid field: tags (all elements must be strings)');
82
- }
83
- if (cap.inputSchema !== undefined && (typeof cap.inputSchema !== 'object' || cap.inputSchema === null)) {
84
- errors.push('Invalid field: inputSchema (must be an object)');
85
- }
86
- if (cap.outputSchema !== undefined && (typeof cap.outputSchema !== 'object' || cap.outputSchema === null)) {
87
- errors.push('Invalid field: outputSchema (must be an object)');
88
- }
89
- if (errors.length > 0) {
90
- return { valid: false, errors };
91
- }
92
- return { valid: true };
93
- }
94
- //# sourceMappingURL=capability.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/registry/capability.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- import { type Envelope } from '../message/envelope.js';
2
- import { PeerStore } from './peer-store.js';
3
- import type { Capability } from './capability.js';
4
- import type { CapabilityAnnouncePayload, CapabilityQueryPayload, CapabilityResponsePayload } from './messages.js';
5
- /**
6
- * DiscoveryService manages capability-based peer discovery.
7
- * It maintains a local index of peer capabilities and handles
8
- * capability announce, query, and response messages.
9
- */
10
- export declare class DiscoveryService {
11
- private peerStore;
12
- private identity;
13
- constructor(peerStore: PeerStore, identity: {
14
- publicKey: string;
15
- privateKey: string;
16
- });
17
- /**
18
- * Announce own capabilities to the network.
19
- * Creates a capability_announce envelope that can be broadcast to peers.
20
- *
21
- * @param capabilities - List of capabilities this agent offers
22
- * @param metadata - Optional metadata about this agent
23
- * @returns A signed capability_announce envelope
24
- */
25
- announce(capabilities: Capability[], metadata?: {
26
- name?: string;
27
- version?: string;
28
- }): Envelope<CapabilityAnnouncePayload>;
29
- /**
30
- * Handle an incoming capability_announce message.
31
- * Updates the peer store with the announced capabilities.
32
- *
33
- * @param envelope - The capability_announce envelope to process
34
- */
35
- handleAnnounce(envelope: Envelope<CapabilityAnnouncePayload>): void;
36
- /**
37
- * Create a capability query payload.
38
- *
39
- * @param queryType - Type of query: 'name', 'tag', or 'schema'
40
- * @param query - The query value (capability name, tag, or schema)
41
- * @param filters - Optional filters (limit, minTrustScore)
42
- * @returns A capability_query payload
43
- */
44
- query(queryType: 'name' | 'tag' | 'schema', query: string | object, filters?: {
45
- limit?: number;
46
- minTrustScore?: number;
47
- }): CapabilityQueryPayload;
48
- /**
49
- * Handle an incoming capability_query message.
50
- * Searches the local peer store and returns matching peers.
51
- *
52
- * @param envelope - The capability_query envelope to process
53
- * @returns A capability_response envelope with matching peers
54
- */
55
- handleQuery(envelope: Envelope<CapabilityQueryPayload>): Envelope<CapabilityResponsePayload>;
56
- /**
57
- * Remove peers that haven't been seen within the specified time window.
58
- *
59
- * @param maxAgeMs - Maximum age in milliseconds
60
- * @returns Number of peers removed
61
- */
62
- pruneStale(maxAgeMs: number, currentTime?: number): number;
63
- }
64
- //# sourceMappingURL=discovery-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discovery-service.d.ts","sourceRoot":"","sources":["../../src/registry/discovery-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AAEvB;;;;GAIG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;gBADR,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAG7D;;;;;;;OAOG;IACH,QAAQ,CACN,YAAY,EAAE,UAAU,EAAE,EAC1B,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,QAAQ,CAAC,yBAAyB,CAAC;IAoBtC;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAgBnE;;;;;;;OAOG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,EACpC,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,sBAAsB;IAQzB;;;;;;OAMG;IACH,WAAW,CACT,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACzC,QAAQ,CAAC,yBAAyB,CAAC;IAsDtC;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,MAAmB,GAAG,MAAM;CAGvE"}
@@ -1,129 +0,0 @@
1
- import { createEnvelope } from '../message/envelope.js';
2
- /**
3
- * DiscoveryService manages capability-based peer discovery.
4
- * It maintains a local index of peer capabilities and handles
5
- * capability announce, query, and response messages.
6
- */
7
- export class DiscoveryService {
8
- peerStore;
9
- identity;
10
- constructor(peerStore, identity) {
11
- this.peerStore = peerStore;
12
- this.identity = identity;
13
- }
14
- /**
15
- * Announce own capabilities to the network.
16
- * Creates a capability_announce envelope that can be broadcast to peers.
17
- *
18
- * @param capabilities - List of capabilities this agent offers
19
- * @param metadata - Optional metadata about this agent
20
- * @returns A signed capability_announce envelope
21
- */
22
- announce(capabilities, metadata) {
23
- const payload = {
24
- publicKey: this.identity.publicKey,
25
- capabilities,
26
- metadata: metadata ? {
27
- ...metadata,
28
- lastSeen: Date.now(),
29
- } : {
30
- lastSeen: Date.now(),
31
- },
32
- };
33
- return createEnvelope('capability_announce', this.identity.publicKey, this.identity.privateKey, payload);
34
- }
35
- /**
36
- * Handle an incoming capability_announce message.
37
- * Updates the peer store with the announced capabilities.
38
- *
39
- * @param envelope - The capability_announce envelope to process
40
- */
41
- handleAnnounce(envelope) {
42
- const { payload } = envelope;
43
- const peer = {
44
- publicKey: payload.publicKey,
45
- capabilities: payload.capabilities,
46
- lastSeen: payload.metadata?.lastSeen || envelope.timestamp,
47
- metadata: payload.metadata ? {
48
- name: payload.metadata.name,
49
- version: payload.metadata.version,
50
- } : undefined,
51
- };
52
- this.peerStore.addOrUpdatePeer(peer);
53
- }
54
- /**
55
- * Create a capability query payload.
56
- *
57
- * @param queryType - Type of query: 'name', 'tag', or 'schema'
58
- * @param query - The query value (capability name, tag, or schema)
59
- * @param filters - Optional filters (limit, minTrustScore)
60
- * @returns A capability_query payload
61
- */
62
- query(queryType, query, filters) {
63
- return {
64
- queryType,
65
- query,
66
- filters,
67
- };
68
- }
69
- /**
70
- * Handle an incoming capability_query message.
71
- * Searches the local peer store and returns matching peers.
72
- *
73
- * @param envelope - The capability_query envelope to process
74
- * @returns A capability_response envelope with matching peers
75
- */
76
- handleQuery(envelope) {
77
- const { payload } = envelope;
78
- let peers = [];
79
- // Execute query based on type
80
- if (payload.queryType === 'name' && typeof payload.query === 'string') {
81
- peers = this.peerStore.findByCapability(payload.query);
82
- }
83
- else if (payload.queryType === 'tag' && typeof payload.query === 'string') {
84
- peers = this.peerStore.findByTag(payload.query);
85
- }
86
- else if (payload.queryType === 'schema') {
87
- // Schema-based matching is deferred to Phase 2b
88
- // For now, return empty results
89
- peers = [];
90
- }
91
- // Apply filters
92
- const limit = payload.filters?.limit;
93
- const totalMatches = peers.length;
94
- if (limit !== undefined && limit > 0) {
95
- peers = peers.slice(0, limit);
96
- }
97
- // Transform peers to response format
98
- const responsePeers = peers.map(peer => ({
99
- publicKey: peer.publicKey,
100
- capabilities: peer.capabilities,
101
- metadata: peer.metadata ? {
102
- name: peer.metadata.name,
103
- version: peer.metadata.version,
104
- lastSeen: peer.lastSeen,
105
- } : {
106
- lastSeen: peer.lastSeen,
107
- },
108
- // Trust score integration deferred to Phase 2b (RFC-001)
109
- trustScore: undefined,
110
- }));
111
- const responsePayload = {
112
- queryId: envelope.id,
113
- peers: responsePeers,
114
- totalMatches,
115
- };
116
- return createEnvelope('capability_response', this.identity.publicKey, this.identity.privateKey, responsePayload, Date.now(), envelope.id // inReplyTo
117
- );
118
- }
119
- /**
120
- * Remove peers that haven't been seen within the specified time window.
121
- *
122
- * @param maxAgeMs - Maximum age in milliseconds
123
- * @returns Number of peers removed
124
- */
125
- pruneStale(maxAgeMs, currentTime = Date.now()) {
126
- return this.peerStore.prune(maxAgeMs, currentTime);
127
- }
128
- }
129
- //# sourceMappingURL=discovery-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discovery-service.js","sourceRoot":"","sources":["../../src/registry/discovery-service.ts"],"names":[],"mappings":"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"}
@@ -1,105 +0,0 @@
1
- import type { Capability } from './capability.js';
2
- /**
3
- * Payload for 'announce' messages.
4
- * An agent publishes its capabilities and metadata to the network.
5
- */
6
- export interface AnnouncePayload {
7
- /** Capabilities this agent offers */
8
- capabilities: Capability[];
9
- /** Optional metadata about the agent */
10
- metadata?: {
11
- /** Human-readable agent name */
12
- name?: string;
13
- /** Agent software version */
14
- version?: string;
15
- };
16
- }
17
- /**
18
- * Payload for 'discover' messages.
19
- * An agent queries the network to find peers with specific capabilities.
20
- */
21
- export interface DiscoverPayload {
22
- /** Query parameters for discovery */
23
- query: {
24
- /** Filter by capability name */
25
- capabilityName?: string;
26
- /** Filter by capability tag */
27
- tag?: string;
28
- };
29
- }
30
- /**
31
- * Payload for responses to 'discover' messages.
32
- * Returns a list of peers matching the discovery query.
33
- */
34
- export interface DiscoverResponsePayload {
35
- /** Peers matching the discovery query */
36
- peers: Array<{
37
- /** Public key of the peer */
38
- publicKey: string;
39
- /** Capabilities the peer offers */
40
- capabilities: Capability[];
41
- /** Optional metadata about the peer */
42
- metadata?: {
43
- /** Human-readable peer name */
44
- name?: string;
45
- /** Peer software version */
46
- version?: string;
47
- };
48
- }>;
49
- }
50
- /**
51
- * Payload for 'capability_announce' messages.
52
- * An agent publishes its capabilities to the network.
53
- */
54
- export interface CapabilityAnnouncePayload {
55
- /** Agent's Ed25519 public key */
56
- publicKey: string;
57
- /** List of capabilities offered */
58
- capabilities: Capability[];
59
- /** Optional metadata */
60
- metadata?: {
61
- name?: string;
62
- version?: string;
63
- lastSeen?: number;
64
- };
65
- }
66
- /**
67
- * Payload for 'capability_query' messages.
68
- * An agent queries the network for peers with specific capabilities.
69
- */
70
- export interface CapabilityQueryPayload {
71
- /** Query type: by name, tag, or schema */
72
- queryType: 'name' | 'tag' | 'schema';
73
- /** Query value (capability name, tag, or JSON schema) */
74
- query: string | object;
75
- /** Optional filters */
76
- filters?: {
77
- /** Minimum trust score (RFC-001 integration) */
78
- minTrustScore?: number;
79
- /** Maximum results to return */
80
- limit?: number;
81
- };
82
- }
83
- /**
84
- * Payload for 'capability_response' messages.
85
- * Response to a capability_query with matching peers.
86
- */
87
- export interface CapabilityResponsePayload {
88
- /** Query ID this is responding to */
89
- queryId: string;
90
- /** Matching peers */
91
- peers: Array<{
92
- publicKey: string;
93
- capabilities: Capability[];
94
- metadata?: {
95
- name?: string;
96
- version?: string;
97
- lastSeen?: number;
98
- };
99
- /** Trust score from RFC-001 (Phase 2b) */
100
- trustScore?: number;
101
- }>;
102
- /** Total matching peers (may be > peers.length if limited) */
103
- totalMatches: number;
104
- }
105
- //# sourceMappingURL=messages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/registry/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,EAAE;QACT,gCAAgC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,6BAA6B;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,KAAK,EAAE;QACL,gCAAgC;QAChC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,+BAA+B;QAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,KAAK,EAAE,KAAK,CAAC;QACX,6BAA6B;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,mCAAmC;QACnC,YAAY,EAAE,UAAU,EAAE,CAAC;QAC3B,uCAAuC;QACvC,QAAQ,CAAC,EAAE;YACT,+BAA+B;YAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,4BAA4B;YAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrC,yDAAyD;IACzD,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,uBAAuB;IACvB,OAAO,CAAC,EAAE;QACR,gDAAgD;QAChD,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gCAAgC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,KAAK,EAAE,KAAK,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,UAAU,EAAE,CAAC;QAC3B,QAAQ,CAAC,EAAE;YACT,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,0CAA0C;QAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/registry/messages.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- import type { Peer } from './peer.js';
2
- /**
3
- * In-memory store for known peers on the network
4
- */
5
- export declare class PeerStore {
6
- private peers;
7
- /**
8
- * Add or update a peer in the store.
9
- * If a peer with the same publicKey exists, it will be updated.
10
- *
11
- * @param peer - The peer to add or update
12
- */
13
- addOrUpdatePeer(peer: Peer): void;
14
- /**
15
- * Remove a peer from the store.
16
- *
17
- * @param publicKey - The public key of the peer to remove
18
- * @returns true if the peer was removed, false if it didn't exist
19
- */
20
- removePeer(publicKey: string): boolean;
21
- /**
22
- * Get a peer by their public key.
23
- *
24
- * @param publicKey - The public key of the peer to retrieve
25
- * @returns The peer if found, undefined otherwise
26
- */
27
- getPeer(publicKey: string): Peer | undefined;
28
- /**
29
- * Find all peers that offer a specific capability by name.
30
- *
31
- * @param name - The capability name to search for
32
- * @returns Array of peers that have a capability with the given name
33
- */
34
- findByCapability(name: string): Peer[];
35
- /**
36
- * Find all peers that have capabilities with a specific tag.
37
- *
38
- * @param tag - The tag to search for
39
- * @returns Array of peers that have at least one capability with the given tag
40
- */
41
- findByTag(tag: string): Peer[];
42
- /**
43
- * Get all peers in the store.
44
- *
45
- * @returns Array of all peers
46
- */
47
- allPeers(): Peer[];
48
- /**
49
- * Remove peers that haven't been seen within the specified time window.
50
- *
51
- * @param maxAgeMs - Maximum age in milliseconds. Peers older than this will be removed.
52
- * @param currentTime - Current timestamp (ms), defaults to Date.now()
53
- * @returns Number of peers removed
54
- */
55
- prune(maxAgeMs: number, currentTime?: number): number;
56
- }
57
- //# sourceMappingURL=peer-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer-store.d.ts","sourceRoot":"","sources":["../../src/registry/peer-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAgC;IAE7C;;;;;OAKG;IACH,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIjC;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAI5C;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE;IAatC;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE;IAa9B;;;;OAIG;IACH,QAAQ,IAAI,IAAI,EAAE;IAIlB;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,MAAmB,GAAG,MAAM;CAalE"}
@@ -1,92 +0,0 @@
1
- /**
2
- * In-memory store for known peers on the network
3
- */
4
- export class PeerStore {
5
- peers = new Map();
6
- /**
7
- * Add or update a peer in the store.
8
- * If a peer with the same publicKey exists, it will be updated.
9
- *
10
- * @param peer - The peer to add or update
11
- */
12
- addOrUpdatePeer(peer) {
13
- this.peers.set(peer.publicKey, peer);
14
- }
15
- /**
16
- * Remove a peer from the store.
17
- *
18
- * @param publicKey - The public key of the peer to remove
19
- * @returns true if the peer was removed, false if it didn't exist
20
- */
21
- removePeer(publicKey) {
22
- return this.peers.delete(publicKey);
23
- }
24
- /**
25
- * Get a peer by their public key.
26
- *
27
- * @param publicKey - The public key of the peer to retrieve
28
- * @returns The peer if found, undefined otherwise
29
- */
30
- getPeer(publicKey) {
31
- return this.peers.get(publicKey);
32
- }
33
- /**
34
- * Find all peers that offer a specific capability by name.
35
- *
36
- * @param name - The capability name to search for
37
- * @returns Array of peers that have a capability with the given name
38
- */
39
- findByCapability(name) {
40
- const result = [];
41
- for (const peer of this.peers.values()) {
42
- const hasCapability = peer.capabilities.some(cap => cap.name === name);
43
- if (hasCapability) {
44
- result.push(peer);
45
- }
46
- }
47
- return result;
48
- }
49
- /**
50
- * Find all peers that have capabilities with a specific tag.
51
- *
52
- * @param tag - The tag to search for
53
- * @returns Array of peers that have at least one capability with the given tag
54
- */
55
- findByTag(tag) {
56
- const result = [];
57
- for (const peer of this.peers.values()) {
58
- const hasTag = peer.capabilities.some(cap => cap.tags.includes(tag));
59
- if (hasTag) {
60
- result.push(peer);
61
- }
62
- }
63
- return result;
64
- }
65
- /**
66
- * Get all peers in the store.
67
- *
68
- * @returns Array of all peers
69
- */
70
- allPeers() {
71
- return Array.from(this.peers.values());
72
- }
73
- /**
74
- * Remove peers that haven't been seen within the specified time window.
75
- *
76
- * @param maxAgeMs - Maximum age in milliseconds. Peers older than this will be removed.
77
- * @param currentTime - Current timestamp (ms), defaults to Date.now()
78
- * @returns Number of peers removed
79
- */
80
- prune(maxAgeMs, currentTime = Date.now()) {
81
- const cutoff = currentTime - maxAgeMs;
82
- let removed = 0;
83
- for (const [publicKey, peer] of this.peers.entries()) {
84
- if (peer.lastSeen < cutoff) {
85
- this.peers.delete(publicKey);
86
- removed++;
87
- }
88
- }
89
- return removed;
90
- }
91
- }
92
- //# sourceMappingURL=peer-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer-store.js","sourceRoot":"","sources":["../../src/registry/peer-store.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAE7C;;;;;OAKG;IACH,eAAe,CAAC,IAAU;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,IAAY;QAC3B,MAAM,MAAM,GAAW,EAAE,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACvE,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,GAAW;QACnB,MAAM,MAAM,GAAW,EAAE,CAAC;QAE1B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACrE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAgB,EAAE,cAAsB,IAAI,CAAC,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;QACtC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,20 +0,0 @@
1
- import type { Capability } from './capability.js';
2
- /**
3
- * A peer is an agent on the network
4
- */
5
- export interface Peer {
6
- /** Identity (hex-encoded ed25519 public key) */
7
- publicKey: string;
8
- /** Capabilities this peer offers */
9
- capabilities: Capability[];
10
- /** Unix timestamp (ms) when this peer was last seen */
11
- lastSeen: number;
12
- /** Optional metadata about the peer */
13
- metadata?: {
14
- /** Human-readable alias */
15
- name?: string;
16
- /** Agent software version */
17
- version?: string;
18
- };
19
- }
20
- //# sourceMappingURL=peer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../src/registry/peer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE;QACT,2BAA2B;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,6BAA6B;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=peer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"peer.js","sourceRoot":"","sources":["../../src/registry/peer.ts"],"names":[],"mappings":""}