@a2aletheia/sdk 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 (122) hide show
  1. package/README.md +436 -0
  2. package/dist/__tests__/pow-solver.test.d.ts +2 -0
  3. package/dist/__tests__/pow-solver.test.d.ts.map +1 -0
  4. package/dist/__tests__/pow-solver.test.js +35 -0
  5. package/dist/__tests__/pow-solver.test.js.map +1 -0
  6. package/dist/__tests__/signing.test.d.ts +2 -0
  7. package/dist/__tests__/signing.test.d.ts.map +1 -0
  8. package/dist/__tests__/signing.test.js +59 -0
  9. package/dist/__tests__/signing.test.js.map +1 -0
  10. package/dist/agent/agent-context.d.ts +26 -0
  11. package/dist/agent/agent-context.d.ts.map +1 -0
  12. package/dist/agent/agent-context.js +38 -0
  13. package/dist/agent/agent-context.js.map +1 -0
  14. package/dist/agent/agent-executor.d.ts +17 -0
  15. package/dist/agent/agent-executor.d.ts.map +1 -0
  16. package/dist/agent/agent-executor.js +91 -0
  17. package/dist/agent/agent-executor.js.map +1 -0
  18. package/dist/agent/agent-response.d.ts +63 -0
  19. package/dist/agent/agent-response.d.ts.map +1 -0
  20. package/dist/agent/agent-response.js +211 -0
  21. package/dist/agent/agent-response.js.map +1 -0
  22. package/dist/agent/aletheia-agent.d.ts +114 -0
  23. package/dist/agent/aletheia-agent.d.ts.map +1 -0
  24. package/dist/agent/aletheia-agent.js +248 -0
  25. package/dist/agent/aletheia-agent.js.map +1 -0
  26. package/dist/agent/index.d.ts +6 -0
  27. package/dist/agent/index.d.ts.map +1 -0
  28. package/dist/agent/index.js +9 -0
  29. package/dist/agent/index.js.map +1 -0
  30. package/dist/agent/types.d.ts +61 -0
  31. package/dist/agent/types.d.ts.map +1 -0
  32. package/dist/agent/types.js +2 -0
  33. package/dist/agent/types.js.map +1 -0
  34. package/dist/client.d.ts +114 -0
  35. package/dist/client.d.ts.map +1 -0
  36. package/dist/client.js +141 -0
  37. package/dist/client.js.map +1 -0
  38. package/dist/identity/agent-signer.d.ts +93 -0
  39. package/dist/identity/agent-signer.d.ts.map +1 -0
  40. package/dist/identity/agent-signer.js +288 -0
  41. package/dist/identity/agent-signer.js.map +1 -0
  42. package/dist/identity/did-resolver.d.ts +17 -0
  43. package/dist/identity/did-resolver.d.ts.map +1 -0
  44. package/dist/identity/did-resolver.js +73 -0
  45. package/dist/identity/did-resolver.js.map +1 -0
  46. package/dist/identity/index.d.ts +4 -0
  47. package/dist/identity/index.d.ts.map +1 -0
  48. package/dist/identity/index.js +4 -0
  49. package/dist/identity/index.js.map +1 -0
  50. package/dist/identity/manifest-fetcher.d.ts +12 -0
  51. package/dist/identity/manifest-fetcher.d.ts.map +1 -0
  52. package/dist/identity/manifest-fetcher.js +27 -0
  53. package/dist/identity/manifest-fetcher.js.map +1 -0
  54. package/dist/index.d.ts +12 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +20 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/logger/console-logger.d.ts +20 -0
  59. package/dist/logger/console-logger.d.ts.map +1 -0
  60. package/dist/logger/console-logger.js +43 -0
  61. package/dist/logger/console-logger.js.map +1 -0
  62. package/dist/logger/event-emitter.d.ts +39 -0
  63. package/dist/logger/event-emitter.d.ts.map +1 -0
  64. package/dist/logger/event-emitter.js +50 -0
  65. package/dist/logger/event-emitter.js.map +1 -0
  66. package/dist/logger/index.d.ts +4 -0
  67. package/dist/logger/index.d.ts.map +1 -0
  68. package/dist/logger/index.js +4 -0
  69. package/dist/logger/index.js.map +1 -0
  70. package/dist/logger/noop-logger.d.ts +20 -0
  71. package/dist/logger/noop-logger.d.ts.map +1 -0
  72. package/dist/logger/noop-logger.js +19 -0
  73. package/dist/logger/noop-logger.js.map +1 -0
  74. package/dist/reputation/index.d.ts +2 -0
  75. package/dist/reputation/index.d.ts.map +1 -0
  76. package/dist/reputation/index.js +2 -0
  77. package/dist/reputation/index.js.map +1 -0
  78. package/dist/reputation/pow-solver.d.ts +20 -0
  79. package/dist/reputation/pow-solver.d.ts.map +1 -0
  80. package/dist/reputation/pow-solver.js +46 -0
  81. package/dist/reputation/pow-solver.js.map +1 -0
  82. package/dist/reputation/rating-client.d.ts +35 -0
  83. package/dist/reputation/rating-client.d.ts.map +1 -0
  84. package/dist/reputation/rating-client.js +51 -0
  85. package/dist/reputation/rating-client.js.map +1 -0
  86. package/dist/security/audit-client.d.ts +17 -0
  87. package/dist/security/audit-client.d.ts.map +1 -0
  88. package/dist/security/audit-client.js +20 -0
  89. package/dist/security/audit-client.js.map +1 -0
  90. package/dist/security/index.d.ts +2 -0
  91. package/dist/security/index.d.ts.map +1 -0
  92. package/dist/security/index.js +2 -0
  93. package/dist/security/index.js.map +1 -0
  94. package/dist/tools/calculator.d.ts +29 -0
  95. package/dist/tools/calculator.d.ts.map +1 -0
  96. package/dist/tools/calculator.js +314 -0
  97. package/dist/tools/calculator.js.map +1 -0
  98. package/dist/tools/convert-units.d.ts +49 -0
  99. package/dist/tools/convert-units.d.ts.map +1 -0
  100. package/dist/tools/convert-units.js +152 -0
  101. package/dist/tools/convert-units.js.map +1 -0
  102. package/dist/tools/get-current-time.d.ts +23 -0
  103. package/dist/tools/get-current-time.d.ts.map +1 -0
  104. package/dist/tools/get-current-time.js +28 -0
  105. package/dist/tools/get-current-time.js.map +1 -0
  106. package/dist/tools/index.d.ts +80 -0
  107. package/dist/tools/index.d.ts.map +1 -0
  108. package/dist/tools/index.js +41 -0
  109. package/dist/tools/index.js.map +1 -0
  110. package/dist/tools/uuid-generator.d.ts +21 -0
  111. package/dist/tools/uuid-generator.d.ts.map +1 -0
  112. package/dist/tools/uuid-generator.js +25 -0
  113. package/dist/tools/uuid-generator.js.map +1 -0
  114. package/dist/utils/http.d.ts +11 -0
  115. package/dist/utils/http.d.ts.map +1 -0
  116. package/dist/utils/http.js +60 -0
  117. package/dist/utils/http.js.map +1 -0
  118. package/dist/utils/signing.d.ts +43 -0
  119. package/dist/utils/signing.d.ts.map +1 -0
  120. package/dist/utils/signing.js +78 -0
  121. package/dist/utils/signing.js.map +1 -0
  122. package/package.json +66 -0
@@ -0,0 +1,91 @@
1
+ import { AgentContextImpl } from "./agent-context.js";
2
+ import { AgentResponse } from "./agent-response.js";
3
+ /**
4
+ * Bridges the functional handler pattern to the @a2a-js AgentExecutor interface.
5
+ */
6
+ export class DelegatingAgentExecutor {
7
+ getHandler;
8
+ getCancelHandler;
9
+ logger;
10
+ events;
11
+ constructor(getHandler, getCancelHandler, logger, events) {
12
+ this.getHandler = getHandler;
13
+ this.getCancelHandler = getCancelHandler;
14
+ this.logger = logger;
15
+ this.events = events;
16
+ }
17
+ async execute(context, eventBus) {
18
+ const handler = this.getHandler();
19
+ if (!handler) {
20
+ throw new Error("No message handler registered. Call agent.handle() first.");
21
+ }
22
+ const agentContext = AgentContextImpl.from(context);
23
+ const response = new AgentResponse(context, eventBus);
24
+ this.logger.debug("Message received", {
25
+ taskId: context.taskId,
26
+ contextId: context.contextId,
27
+ });
28
+ this.events.emit("message.received", {
29
+ taskId: context.taskId,
30
+ contextId: context.contextId,
31
+ });
32
+ try {
33
+ await handler(agentContext, response);
34
+ // Ensure finished is called if handler didn't finalize
35
+ if (!response.isFinished) {
36
+ eventBus.finished();
37
+ }
38
+ this.logger.debug("Message handled", {
39
+ taskId: context.taskId,
40
+ contextId: context.contextId,
41
+ });
42
+ this.events.emit("message.sent", {
43
+ taskId: context.taskId,
44
+ contextId: context.contextId,
45
+ });
46
+ }
47
+ catch (error) {
48
+ const errorMessage = error instanceof Error ? error.message : String(error);
49
+ this.logger.error("Handler error", {
50
+ taskId: context.taskId,
51
+ error: errorMessage,
52
+ });
53
+ this.events.emit("message.failed", {
54
+ taskId: context.taskId,
55
+ error: errorMessage,
56
+ });
57
+ // Publish failure if not already finalized
58
+ if (!response.isFinished) {
59
+ response.fail(`Handler error: ${errorMessage}`);
60
+ }
61
+ else {
62
+ // Re-throw if already finished (shouldn't happen normally)
63
+ throw error;
64
+ }
65
+ }
66
+ }
67
+ async cancelTask(taskId, eventBus) {
68
+ const handler = this.getCancelHandler();
69
+ const response = new AgentResponse(null, eventBus);
70
+ if (handler) {
71
+ try {
72
+ await handler(taskId, response);
73
+ // Ensure finished is called
74
+ if (!response.isFinished) {
75
+ response.canceled();
76
+ }
77
+ }
78
+ catch (error) {
79
+ if (!response.isFinished) {
80
+ const errorMessage = error instanceof Error ? error.message : String(error);
81
+ response.fail(`Cancel handler error: ${errorMessage}`);
82
+ }
83
+ }
84
+ }
85
+ else {
86
+ // Default: publish canceled status
87
+ response.canceled();
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=agent-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-executor.js","sourceRoot":"","sources":["../../src/agent/agent-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { ExecutionEventBus, RequestContext } from "@a2a-js/sdk/server";
2
+ import type { Part, Artifact } from "@a2a-js/sdk";
3
+ /**
4
+ * Response helper that wraps ExecutionEventBus with convenience methods.
5
+ */
6
+ export declare class AgentResponse {
7
+ readonly context: RequestContext | null;
8
+ readonly eventBus: ExecutionEventBus;
9
+ private _isFinished;
10
+ private _taskSeeded;
11
+ constructor(context: RequestContext | null, eventBus: ExecutionEventBus);
12
+ /**
13
+ * Whether the response has been finalized.
14
+ */
15
+ get isFinished(): boolean;
16
+ /**
17
+ * Send a text response and complete the request.
18
+ */
19
+ text(content: string): void;
20
+ /**
21
+ * Send a data response and complete the request.
22
+ */
23
+ data(data: Record<string, unknown>): void;
24
+ /**
25
+ * Send a message with custom parts and complete the request.
26
+ */
27
+ message(parts: Part[]): void;
28
+ /**
29
+ * Publish a "working" status update (non-final).
30
+ */
31
+ working(message?: string): void;
32
+ /**
33
+ * Publish an artifact update.
34
+ */
35
+ artifact(artifact: Artifact, options?: {
36
+ append?: boolean;
37
+ lastChunk?: boolean;
38
+ }): void;
39
+ /**
40
+ * Publish a "completed" status and finalize.
41
+ */
42
+ done(message?: string): void;
43
+ /**
44
+ * Publish a "failed" status and finalize.
45
+ */
46
+ fail(error: string): void;
47
+ /**
48
+ * Publish a "canceled" status and finalize.
49
+ */
50
+ canceled(): void;
51
+ /**
52
+ * Publish an "input-required" status (non-final by default).
53
+ */
54
+ inputRequired(message: string): void;
55
+ /**
56
+ * Emit a Task event to initialize the ResultManager's state.
57
+ * Called once before the first status-update/artifact-update so the
58
+ * ResultManager can match subsequent events by taskId.
59
+ */
60
+ private _seedTask;
61
+ private _finish;
62
+ }
63
+ //# sourceMappingURL=agent-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-response.d.ts","sourceRoot":"","sources":["../../src/agent/agent-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,qBAAa,aAAa;IAKtB,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IACvC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;IALtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAGjB,OAAO,EAAE,cAAc,GAAG,IAAI,EAC9B,QAAQ,EAAE,iBAAiB;IAGtC;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAMD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY3B;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYzC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAgB5B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAwB/B;;OAEG;IACH,QAAQ,CACN,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAClD,IAAI;IAYP;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAqB5B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAmBzB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAWhB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAuBpC;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,OAAO;CAIhB"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Response helper that wraps ExecutionEventBus with convenience methods.
3
+ */
4
+ export class AgentResponse {
5
+ context;
6
+ eventBus;
7
+ _isFinished = false;
8
+ _taskSeeded = false;
9
+ constructor(context, eventBus) {
10
+ this.context = context;
11
+ this.eventBus = eventBus;
12
+ }
13
+ /**
14
+ * Whether the response has been finalized.
15
+ */
16
+ get isFinished() {
17
+ return this._isFinished;
18
+ }
19
+ // ---------------------------------------------------------------------------
20
+ // Quick responses (publishes + finishes)
21
+ // ---------------------------------------------------------------------------
22
+ /**
23
+ * Send a text response and complete the request.
24
+ */
25
+ text(content) {
26
+ this.eventBus.publish({
27
+ kind: "message",
28
+ role: "agent",
29
+ messageId: crypto.randomUUID(),
30
+ parts: [{ kind: "text", text: content }],
31
+ contextId: this.context?.contextId ?? "",
32
+ taskId: this.context?.taskId,
33
+ });
34
+ this._finish();
35
+ }
36
+ /**
37
+ * Send a data response and complete the request.
38
+ */
39
+ data(data) {
40
+ this.eventBus.publish({
41
+ kind: "message",
42
+ role: "agent",
43
+ messageId: crypto.randomUUID(),
44
+ parts: [{ kind: "data", data }],
45
+ contextId: this.context?.contextId ?? "",
46
+ taskId: this.context?.taskId,
47
+ });
48
+ this._finish();
49
+ }
50
+ /**
51
+ * Send a message with custom parts and complete the request.
52
+ */
53
+ message(parts) {
54
+ this.eventBus.publish({
55
+ kind: "message",
56
+ role: "agent",
57
+ messageId: crypto.randomUUID(),
58
+ parts,
59
+ contextId: this.context?.contextId ?? "",
60
+ taskId: this.context?.taskId,
61
+ });
62
+ this._finish();
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // Streaming responses (call done() or fail() at end)
66
+ // ---------------------------------------------------------------------------
67
+ /**
68
+ * Publish a "working" status update (non-final).
69
+ */
70
+ working(message) {
71
+ // Seed a Task event first so the ResultManager can track subsequent
72
+ // status-updates (avoids "unknown task" warnings from @a2a-js/sdk).
73
+ this._seedTask();
74
+ this.eventBus.publish({
75
+ kind: "status-update",
76
+ taskId: this.context?.taskId ?? "",
77
+ contextId: this.context?.contextId ?? "",
78
+ status: {
79
+ state: "working",
80
+ message: message
81
+ ? {
82
+ kind: "message",
83
+ role: "agent",
84
+ messageId: crypto.randomUUID(),
85
+ parts: [{ kind: "text", text: message }],
86
+ }
87
+ : undefined,
88
+ },
89
+ final: false,
90
+ });
91
+ }
92
+ /**
93
+ * Publish an artifact update.
94
+ */
95
+ artifact(artifact, options) {
96
+ this._seedTask();
97
+ this.eventBus.publish({
98
+ kind: "artifact-update",
99
+ taskId: this.context?.taskId ?? "",
100
+ contextId: this.context?.contextId ?? "",
101
+ artifact,
102
+ append: options?.append,
103
+ lastChunk: options?.lastChunk,
104
+ });
105
+ }
106
+ /**
107
+ * Publish a "completed" status and finalize.
108
+ */
109
+ done(message) {
110
+ this.eventBus.publish({
111
+ kind: "status-update",
112
+ taskId: this.context?.taskId ?? "",
113
+ contextId: this.context?.contextId ?? "",
114
+ status: {
115
+ state: "completed",
116
+ message: message
117
+ ? {
118
+ kind: "message",
119
+ role: "agent",
120
+ messageId: crypto.randomUUID(),
121
+ parts: [{ kind: "text", text: message }],
122
+ }
123
+ : undefined,
124
+ },
125
+ final: true,
126
+ });
127
+ this._finish();
128
+ }
129
+ /**
130
+ * Publish a "failed" status and finalize.
131
+ */
132
+ fail(error) {
133
+ this.eventBus.publish({
134
+ kind: "status-update",
135
+ taskId: this.context?.taskId ?? "",
136
+ contextId: this.context?.contextId ?? "",
137
+ status: {
138
+ state: "failed",
139
+ message: {
140
+ kind: "message",
141
+ role: "agent",
142
+ messageId: crypto.randomUUID(),
143
+ parts: [{ kind: "text", text: error }],
144
+ },
145
+ },
146
+ final: true,
147
+ });
148
+ this._finish();
149
+ }
150
+ /**
151
+ * Publish a "canceled" status and finalize.
152
+ */
153
+ canceled() {
154
+ this.eventBus.publish({
155
+ kind: "status-update",
156
+ taskId: this.context?.taskId ?? "",
157
+ contextId: this.context?.contextId ?? "",
158
+ status: { state: "canceled" },
159
+ final: true,
160
+ });
161
+ this._finish();
162
+ }
163
+ /**
164
+ * Publish an "input-required" status (non-final by default).
165
+ */
166
+ inputRequired(message) {
167
+ this._seedTask();
168
+ this.eventBus.publish({
169
+ kind: "status-update",
170
+ taskId: this.context?.taskId ?? "",
171
+ contextId: this.context?.contextId ?? "",
172
+ status: {
173
+ state: "input-required",
174
+ message: {
175
+ kind: "message",
176
+ role: "agent",
177
+ messageId: crypto.randomUUID(),
178
+ parts: [{ kind: "text", text: message }],
179
+ },
180
+ },
181
+ final: false,
182
+ });
183
+ }
184
+ // ---------------------------------------------------------------------------
185
+ // Internal
186
+ // ---------------------------------------------------------------------------
187
+ /**
188
+ * Emit a Task event to initialize the ResultManager's state.
189
+ * Called once before the first status-update/artifact-update so the
190
+ * ResultManager can match subsequent events by taskId.
191
+ */
192
+ _seedTask() {
193
+ if (this._taskSeeded || !this.context)
194
+ return;
195
+ this._taskSeeded = true;
196
+ this.eventBus.publish({
197
+ kind: "task",
198
+ id: this.context.taskId,
199
+ contextId: this.context.contextId,
200
+ status: {
201
+ state: "working",
202
+ timestamp: new Date().toISOString(),
203
+ },
204
+ });
205
+ }
206
+ _finish() {
207
+ this._isFinished = true;
208
+ this.eventBus.finished();
209
+ }
210
+ }
211
+ //# sourceMappingURL=agent-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-response.js","sourceRoot":"","sources":["../../src/agent/agent-response.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import type { AgentCard } from "@a2a-js/sdk";
2
+ import { type TaskStore, type A2ARequestHandler } from "@a2a-js/sdk/server";
3
+ import type { A2AResponse } from "@a2a-js/sdk";
4
+ import type { AletheiaLogger, AletheiaEventType, AletheiaEventHandler } from "@a2aletheia/types";
5
+ import type { AletheiaAgentConfig, AgentHandler, CancelHandler } from "./types.js";
6
+ import { EventEmitter } from "../logger/event-emitter.js";
7
+ /**
8
+ * AletheiaAgent provides a high-level API for building A2A-compliant agents
9
+ * with Aletheia trust layer integration.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { AletheiaAgent } from "@a2aletheia/sdk";
14
+ *
15
+ * const agent = new AletheiaAgent({
16
+ * name: "Translator",
17
+ * version: "1.0.0",
18
+ * url: "https://translate.example.com",
19
+ * description: "Translates text between languages",
20
+ * skills: [{
21
+ * id: "translate",
22
+ * name: "translate-text",
23
+ * description: "Translate text to another language",
24
+ * tags: ["translation", "nlp"],
25
+ * }],
26
+ * });
27
+ *
28
+ * agent.handle(async (context, response) => {
29
+ * const text = context.textContent;
30
+ * response.text(`Translated: ${text}`);
31
+ * });
32
+ *
33
+ * await agent.start(4000);
34
+ * ```
35
+ */
36
+ export declare class AletheiaAgent {
37
+ private readonly config;
38
+ private readonly agentCard;
39
+ private readonly taskStore;
40
+ private readonly requestHandler;
41
+ private readonly jsonRpcHandler;
42
+ private readonly executor;
43
+ readonly logger: AletheiaLogger;
44
+ readonly events: EventEmitter;
45
+ private messageHandler?;
46
+ private cancelHandler?;
47
+ private server?;
48
+ constructor(config: AletheiaAgentConfig);
49
+ /**
50
+ * Register the message handler for incoming requests.
51
+ */
52
+ handle(handler: AgentHandler): this;
53
+ /**
54
+ * Register an optional cancel handler.
55
+ */
56
+ onCancel(handler: CancelHandler): this;
57
+ /**
58
+ * Subscribe to lifecycle events. Returns an unsubscribe function.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * agent.on("message.received", (event) => {
63
+ * console.log("Received message", event.data);
64
+ * });
65
+ *
66
+ * // Wildcard — receive all events
67
+ * agent.on("*", (event) => {
68
+ * metrics.increment(`aletheia.${event.type}`);
69
+ * });
70
+ * ```
71
+ */
72
+ on(event: AletheiaEventType | "*", handler: AletheiaEventHandler): () => void;
73
+ /**
74
+ * Handle a JSON-RPC request body (framework-agnostic).
75
+ * Use this for Hono, Fastify, or other frameworks.
76
+ *
77
+ * @param body - The parsed JSON-RPC request body
78
+ * @returns A2AResponse or AsyncGenerator<A2AResponse> for streaming
79
+ */
80
+ handleRequest(body: unknown): Promise<A2AResponse | AsyncGenerator<A2AResponse, void, undefined>>;
81
+ /**
82
+ * Start a standalone Express server.
83
+ *
84
+ * @param port - Port to listen on
85
+ * @returns Promise that resolves when server is listening
86
+ */
87
+ start(port: number): Promise<void>;
88
+ /**
89
+ * Stop the standalone server if running.
90
+ */
91
+ stop(): void;
92
+ /**
93
+ * Get the agent's AgentCard.
94
+ */
95
+ getAgentCard(): AgentCard;
96
+ /**
97
+ * Get the underlying request handler for custom integrations.
98
+ */
99
+ getRequestHandler(): A2ARequestHandler;
100
+ /**
101
+ * Get the task store.
102
+ */
103
+ getTaskStore(): TaskStore;
104
+ private buildAgentCard;
105
+ /**
106
+ * Get Aletheia-specific extensions.
107
+ */
108
+ getAletheiaExtensions(): import("./types.js").AletheiaExtensions | undefined;
109
+ /**
110
+ * Build a minimal W3C DID Document for did:web self-hosting.
111
+ */
112
+ private buildDIDDocument;
113
+ }
114
+ //# sourceMappingURL=aletheia-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aletheia-agent.d.ts","sourceRoot":"","sources":["../../src/agent/aletheia-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IAEnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAC,CAAwB;gBAE3B,MAAM,EAAE,mBAAmB;IA2BvC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKnC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAStC;;;;;;;;;;;;;;OAcG;IACH,EAAE,CACA,KAAK,EAAE,iBAAiB,GAAG,GAAG,EAC9B,OAAO,EAAE,oBAAoB,GAC5B,MAAM,IAAI;IAQb;;;;;;OAMG;IACG,aAAa,CACjB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAQtE;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCxC;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,iBAAiB,IAAI,iBAAiB;IAItC;;OAEG;IACH,YAAY,IAAI,SAAS;IAQzB,OAAO,CAAC,cAAc;IAqDtB;;OAEG;IACH,qBAAqB;IAIrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAiBzB"}