aibroker 0.53.5 → 0.55.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 (74) hide show
  1. package/README.md +3 -0
  2. package/dist/.metadata_never_index +0 -0
  3. package/dist/a2a/agentish-extension.d.ts +111 -0
  4. package/dist/a2a/agentish-extension.d.ts.map +1 -0
  5. package/dist/a2a/agentish-extension.js +124 -0
  6. package/dist/a2a/agentish-extension.js.map +1 -0
  7. package/dist/a2a/client.d.ts +45 -0
  8. package/dist/a2a/client.d.ts.map +1 -0
  9. package/dist/a2a/client.js +112 -0
  10. package/dist/a2a/client.js.map +1 -0
  11. package/dist/a2a/exposure.d.ts +24 -0
  12. package/dist/a2a/exposure.d.ts.map +1 -0
  13. package/dist/a2a/exposure.js +70 -0
  14. package/dist/a2a/exposure.js.map +1 -0
  15. package/dist/a2a/schema/types.d.ts +153 -0
  16. package/dist/a2a/schema/types.d.ts.map +1 -0
  17. package/dist/a2a/schema/types.js +28 -0
  18. package/dist/a2a/schema/types.js.map +1 -0
  19. package/dist/a2a/schema/validate.d.ts +27 -0
  20. package/dist/a2a/schema/validate.d.ts.map +1 -0
  21. package/dist/a2a/schema/validate.js +190 -0
  22. package/dist/a2a/schema/validate.js.map +1 -0
  23. package/dist/a2a/server.d.ts +73 -0
  24. package/dist/a2a/server.d.ts.map +1 -0
  25. package/dist/a2a/server.js +325 -0
  26. package/dist/a2a/server.js.map +1 -0
  27. package/dist/a2a/tasks.d.ts +81 -0
  28. package/dist/a2a/tasks.d.ts.map +1 -0
  29. package/dist/a2a/tasks.js +148 -0
  30. package/dist/a2a/tasks.js.map +1 -0
  31. package/dist/agentish/index.d.ts +80 -0
  32. package/dist/agentish/index.d.ts.map +1 -0
  33. package/dist/agentish/index.js +263 -0
  34. package/dist/agentish/index.js.map +1 -0
  35. package/dist/daemon/a2a-cli.d.ts +46 -0
  36. package/dist/daemon/a2a-cli.d.ts.map +1 -0
  37. package/dist/daemon/a2a-cli.js +385 -0
  38. package/dist/daemon/a2a-cli.js.map +1 -0
  39. package/dist/daemon/agentish-cli.d.ts +17 -0
  40. package/dist/daemon/agentish-cli.d.ts.map +1 -0
  41. package/dist/daemon/agentish-cli.js +137 -0
  42. package/dist/daemon/agentish-cli.js.map +1 -0
  43. package/dist/daemon/agentish-stats.d.ts +65 -0
  44. package/dist/daemon/agentish-stats.d.ts.map +1 -0
  45. package/dist/daemon/agentish-stats.js +125 -0
  46. package/dist/daemon/agentish-stats.js.map +1 -0
  47. package/dist/daemon/agentish.d.ts +13 -0
  48. package/dist/daemon/agentish.d.ts.map +1 -0
  49. package/dist/daemon/agentish.js +13 -0
  50. package/dist/daemon/agentish.js.map +1 -0
  51. package/dist/daemon/budget-cli.d.ts.map +1 -1
  52. package/dist/daemon/budget-cli.js +22 -3
  53. package/dist/daemon/budget-cli.js.map +1 -1
  54. package/dist/daemon/cli.js +12 -1
  55. package/dist/daemon/cli.js.map +1 -1
  56. package/dist/daemon/core-handlers.d.ts.map +1 -1
  57. package/dist/daemon/core-handlers.js +38 -0
  58. package/dist/daemon/core-handlers.js.map +1 -1
  59. package/dist/daemon/manage.d.ts.map +1 -1
  60. package/dist/daemon/manage.js +10 -1
  61. package/dist/daemon/manage.js.map +1 -1
  62. package/dist/daemon/todoist-webhook.d.ts +25 -2
  63. package/dist/daemon/todoist-webhook.d.ts.map +1 -1
  64. package/dist/daemon/todoist-webhook.js +136 -17
  65. package/dist/daemon/todoist-webhook.js.map +1 -1
  66. package/dist/mcp/index.js +41 -1
  67. package/dist/mcp/index.js.map +1 -1
  68. package/dist/transport/screen.d.ts +7 -0
  69. package/dist/transport/screen.d.ts.map +1 -1
  70. package/dist/transport/screen.js +17 -3
  71. package/dist/transport/screen.js.map +1 -1
  72. package/docker/ota/src/landing.ts +22 -24
  73. package/docker/ota/src/server.ts +5 -1
  74. package/package.json +1 -1
@@ -0,0 +1,153 @@
1
+ /**
2
+ * a2a/schema/types.ts — the subset of the A2A v0.3.0 wire types this project
3
+ * actually emits or consumes. See README.md in this directory for the
4
+ * source, retrieval date, and what is deliberately NOT here.
5
+ */
6
+ /** Spec 6.3 TaskState Enum — full enum, though this server only ever
7
+ * produces submitted/working/input-required/completed/canceled/failed. */
8
+ export type TaskState = "submitted" | "working" | "input-required" | "completed" | "canceled" | "failed" | "rejected" | "auth-required" | "unknown";
9
+ export declare const TASK_STATES: readonly TaskState[];
10
+ /** Spec 6.5.1 TextPart Object. The only Part kind this project emits. */
11
+ export interface TextPart {
12
+ readonly kind: "text";
13
+ text: string;
14
+ metadata?: Record<string, unknown>;
15
+ }
16
+ /** Spec 6.5 Part Union Type — FilePart/DataPart are accepted opaquely on
17
+ * read (never produced), so callers sending them are not rejected outright. */
18
+ export type Part = TextPart | {
19
+ readonly kind: "file" | "data";
20
+ [k: string]: unknown;
21
+ };
22
+ /** Spec 6.4 Message Object. */
23
+ export interface A2AMessage {
24
+ readonly kind: "message";
25
+ readonly role: "user" | "agent";
26
+ parts: Part[];
27
+ messageId: string;
28
+ taskId?: string;
29
+ contextId?: string;
30
+ metadata?: Record<string, unknown>;
31
+ extensions?: string[];
32
+ referenceTaskIds?: string[];
33
+ }
34
+ /** Spec 6.2 TaskStatus Object. */
35
+ export interface TaskStatus {
36
+ state: TaskState;
37
+ message?: A2AMessage;
38
+ timestamp?: string;
39
+ }
40
+ /** Spec 6.7 Artifact Object. */
41
+ export interface Artifact {
42
+ artifactId: string;
43
+ name?: string;
44
+ description?: string;
45
+ parts: Part[];
46
+ metadata?: Record<string, unknown>;
47
+ extensions?: string[];
48
+ }
49
+ /** Spec 6.1 Task Object. */
50
+ export interface Task {
51
+ readonly kind: "task";
52
+ id: string;
53
+ contextId: string;
54
+ status: TaskStatus;
55
+ history?: A2AMessage[];
56
+ artifacts?: Artifact[];
57
+ metadata?: Record<string, unknown>;
58
+ }
59
+ /** Spec 5.5.2.1 AgentExtension Object. */
60
+ export interface AgentExtension {
61
+ uri: string;
62
+ description?: string;
63
+ required?: boolean;
64
+ params?: Record<string, unknown>;
65
+ }
66
+ /** Spec 5.5.2 AgentCapabilities Object. */
67
+ export interface AgentCapabilities {
68
+ streaming?: boolean;
69
+ pushNotifications?: boolean;
70
+ stateTransitionHistory?: boolean;
71
+ extensions?: AgentExtension[];
72
+ }
73
+ /** Spec 5.5.4 AgentSkill Object. */
74
+ export interface AgentSkill {
75
+ id: string;
76
+ name: string;
77
+ description: string;
78
+ tags: string[];
79
+ examples?: string[];
80
+ inputModes?: string[];
81
+ outputModes?: string[];
82
+ security?: Record<string, string[]>[];
83
+ }
84
+ /**
85
+ * Spec 5.5.3 SecurityScheme Object — discriminated union over the OpenAPI
86
+ * 3.0 Security Scheme Object (https://swagger.io/specification/#security-scheme-object).
87
+ * Only the HTTP bearer variant is vendored: it is the only one this project
88
+ * emits.
89
+ */
90
+ export interface HTTPAuthSecurityScheme {
91
+ type: "http";
92
+ scheme: "bearer";
93
+ bearerFormat?: string;
94
+ description?: string;
95
+ }
96
+ /** Spec 5.5 AgentCard Object — fields this project sets. `provider`,
97
+ * `iconUrl`, `documentationUrl`, `additionalInterfaces`, `signatures`
98
+ * and `supportsAuthenticatedExtendedCard` are all optional in the spec
99
+ * and omitted here rather than guessed. */
100
+ export interface AgentCard {
101
+ protocolVersion: string;
102
+ name: string;
103
+ description: string;
104
+ url: string;
105
+ preferredTransport: "JSONRPC";
106
+ version: string;
107
+ capabilities: AgentCapabilities;
108
+ securitySchemes?: Record<string, HTTPAuthSecurityScheme>;
109
+ security?: Record<string, string[]>[];
110
+ defaultInputModes: string[];
111
+ defaultOutputModes: string[];
112
+ skills: AgentSkill[];
113
+ }
114
+ /**
115
+ * Spec 8.1 Standard JSON-RPC Errors + 8.2 A2A-Specific Errors, verbatim.
116
+ * A2A-specific codes are in the JSON-RPC-reserved server-error range
117
+ * (-32000..-32099).
118
+ */
119
+ export declare const JSONRPC_ERRORS: {
120
+ readonly PARSE_ERROR: -32700;
121
+ readonly INVALID_REQUEST: -32600;
122
+ readonly METHOD_NOT_FOUND: -32601;
123
+ readonly INVALID_PARAMS: -32602;
124
+ readonly INTERNAL_ERROR: -32603;
125
+ readonly TASK_NOT_FOUND: -32001;
126
+ readonly TASK_NOT_CANCELABLE: -32002;
127
+ readonly PUSH_NOTIFICATION_NOT_SUPPORTED: -32003;
128
+ readonly UNSUPPORTED_OPERATION: -32004;
129
+ readonly CONTENT_TYPE_NOT_SUPPORTED: -32005;
130
+ readonly INVALID_AGENT_RESPONSE: -32006;
131
+ };
132
+ export interface JSONRPCError {
133
+ code: number;
134
+ message: string;
135
+ data?: unknown;
136
+ }
137
+ export interface JSONRPCRequest {
138
+ jsonrpc: "2.0";
139
+ id: string | number;
140
+ method: string;
141
+ params?: Record<string, unknown>;
142
+ }
143
+ export interface JSONRPCSuccess {
144
+ jsonrpc: "2.0";
145
+ id: string | number;
146
+ result: unknown;
147
+ }
148
+ export interface JSONRPCFailure {
149
+ jsonrpc: "2.0";
150
+ id: string | number | null;
151
+ error: JSONRPCError;
152
+ }
153
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/a2a/schema/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;2EAC2E;AAC3E,MAAM,MAAM,SAAS,GACjB,WAAW,GAAG,SAAS,GAAG,gBAAgB,GAAG,WAAW,GACxD,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,eAAe,GAAG,SAAS,CAAC;AAErE,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAG3C,CAAC;AAEF,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;gFACgF;AAChF,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAEvF,+BAA+B;AAC/B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,4BAA4B;AAC5B,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;CACvC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;4CAG4C;AAC5C,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,EAAE,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,iBAAiB,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;CAYjB,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;CACrB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * a2a/schema/types.ts — the subset of the A2A v0.3.0 wire types this project
3
+ * actually emits or consumes. See README.md in this directory for the
4
+ * source, retrieval date, and what is deliberately NOT here.
5
+ */
6
+ export const TASK_STATES = [
7
+ "submitted", "working", "input-required", "completed",
8
+ "canceled", "failed", "rejected", "auth-required", "unknown",
9
+ ];
10
+ /**
11
+ * Spec 8.1 Standard JSON-RPC Errors + 8.2 A2A-Specific Errors, verbatim.
12
+ * A2A-specific codes are in the JSON-RPC-reserved server-error range
13
+ * (-32000..-32099).
14
+ */
15
+ export const JSONRPC_ERRORS = {
16
+ PARSE_ERROR: -32700,
17
+ INVALID_REQUEST: -32600,
18
+ METHOD_NOT_FOUND: -32601,
19
+ INVALID_PARAMS: -32602,
20
+ INTERNAL_ERROR: -32603,
21
+ TASK_NOT_FOUND: -32001,
22
+ TASK_NOT_CANCELABLE: -32002,
23
+ PUSH_NOTIFICATION_NOT_SUPPORTED: -32003,
24
+ UNSUPPORTED_OPERATION: -32004,
25
+ CONTENT_TYPE_NOT_SUPPORTED: -32005,
26
+ INVALID_AGENT_RESPONSE: -32006,
27
+ };
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/a2a/schema/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW;IACrD,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS;CAC7D,CAAC;AAkHF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,CAAC,KAAK;IACnB,eAAe,EAAE,CAAC,KAAK;IACvB,gBAAgB,EAAE,CAAC,KAAK;IACxB,cAAc,EAAE,CAAC,KAAK;IACtB,cAAc,EAAE,CAAC,KAAK;IACtB,cAAc,EAAE,CAAC,KAAK;IACtB,mBAAmB,EAAE,CAAC,KAAK;IAC3B,+BAA+B,EAAE,CAAC,KAAK;IACvC,qBAAqB,EAAE,CAAC,KAAK;IAC7B,0BAA0B,EAAE,CAAC,KAAK;IAClC,sBAAsB,EAAE,CAAC,KAAK;CACtB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * a2a/schema/validate.ts — structural validation against the vendored A2A
3
+ * subset in types.ts. Dependency-free by design (no npm JSON-Schema
4
+ * engine): this is small enough to hand-check field by field, and every
5
+ * check cites the field it is checking so a mismatch is traceable back to
6
+ * README.md's source.
7
+ *
8
+ * Used two ways: the server validates every AgentCard and Task it emits
9
+ * (a bug that shapes an invalid card is worse when nothing notices), and
10
+ * `aibroker a2a check` uses the same functions against an ARBITRARY
11
+ * remote agent's card, which is what makes that command interoperability
12
+ * tooling rather than a self-test.
13
+ */
14
+ export interface ValidationResult {
15
+ ok: boolean;
16
+ errors: string[];
17
+ }
18
+ /**
19
+ * Spec 5.5 AgentCard Object. Checks only the fields this project sets —
20
+ * see schema/README.md for what is deliberately out of scope.
21
+ */
22
+ export declare function validateAgentCard(card: unknown): ValidationResult;
23
+ /** Spec 6.1 Task Object + 6.2 TaskStatus Object + 6.3 TaskState Enum. */
24
+ export declare function validateTask(task: unknown): ValidationResult;
25
+ /** Spec 6.4 Message Object — used to validate an inbound message/send params.message. */
26
+ export declare function validateMessage(msg: unknown): ValidationResult;
27
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/a2a/schema/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAgCD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CA2CjE;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CA2C5D;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAY9D"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * a2a/schema/validate.ts — structural validation against the vendored A2A
3
+ * subset in types.ts. Dependency-free by design (no npm JSON-Schema
4
+ * engine): this is small enough to hand-check field by field, and every
5
+ * check cites the field it is checking so a mismatch is traceable back to
6
+ * README.md's source.
7
+ *
8
+ * Used two ways: the server validates every AgentCard and Task it emits
9
+ * (a bug that shapes an invalid card is worse when nothing notices), and
10
+ * `aibroker a2a check` uses the same functions against an ARBITRARY
11
+ * remote agent's card, which is what makes that command interoperability
12
+ * tooling rather than a self-test.
13
+ */
14
+ import { TASK_STATES } from "./types.js";
15
+ function isObj(v) {
16
+ return typeof v === "object" && v !== null && !Array.isArray(v);
17
+ }
18
+ function isStr(v) { return typeof v === "string"; }
19
+ function isStrArray(v) {
20
+ return Array.isArray(v) && v.every((x) => typeof x === "string");
21
+ }
22
+ /** Spec 6.5.1 TextPart Object — the only Part kind this project checks
23
+ * strictly; a `file`/`data` kind part is accepted opaquely. */
24
+ function checkPart(v, path, errors) {
25
+ if (!isObj(v)) {
26
+ errors.push(`${path}: not an object`);
27
+ return;
28
+ }
29
+ if (v.kind === "text") {
30
+ if (!isStr(v.text))
31
+ errors.push(`${path}: TextPart.text must be a string`);
32
+ return;
33
+ }
34
+ if (v.kind !== "file" && v.kind !== "data") {
35
+ errors.push(`${path}: Part.kind must be "text", "file" or "data"`);
36
+ }
37
+ }
38
+ /** Spec 5.5.4 AgentSkill Object. */
39
+ function checkSkill(v, path, errors) {
40
+ if (!isObj(v)) {
41
+ errors.push(`${path}: not an object`);
42
+ return;
43
+ }
44
+ if (!isStr(v.id))
45
+ errors.push(`${path}.id: required string`);
46
+ if (!isStr(v.name))
47
+ errors.push(`${path}.name: required string`);
48
+ if (!isStr(v.description))
49
+ errors.push(`${path}.description: required string`);
50
+ if (!isStrArray(v.tags))
51
+ errors.push(`${path}.tags: required string[]`);
52
+ }
53
+ /**
54
+ * Spec 5.5 AgentCard Object. Checks only the fields this project sets —
55
+ * see schema/README.md for what is deliberately out of scope.
56
+ */
57
+ export function validateAgentCard(card) {
58
+ const errors = [];
59
+ if (!isObj(card))
60
+ return { ok: false, errors: ["AgentCard: not an object"] };
61
+ if (!isStr(card.protocolVersion))
62
+ errors.push("protocolVersion: required string");
63
+ if (!isStr(card.name))
64
+ errors.push("name: required string");
65
+ if (!isStr(card.description))
66
+ errors.push("description: required string");
67
+ if (!isStr(card.url))
68
+ errors.push("url: required string");
69
+ if (card.preferredTransport !== "JSONRPC")
70
+ errors.push('preferredTransport: must be "JSONRPC"');
71
+ if (!isStr(card.version))
72
+ errors.push("version: required string");
73
+ if (!isStrArray(card.defaultInputModes))
74
+ errors.push("defaultInputModes: required string[]");
75
+ if (!isStrArray(card.defaultOutputModes))
76
+ errors.push("defaultOutputModes: required string[]");
77
+ if (!isObj(card.capabilities)) {
78
+ errors.push("capabilities: required object (AgentCapabilities)");
79
+ }
80
+ else {
81
+ const cap = card.capabilities;
82
+ if (cap.streaming !== undefined && typeof cap.streaming !== "boolean")
83
+ errors.push("capabilities.streaming: must be boolean");
84
+ if (cap.pushNotifications !== undefined && typeof cap.pushNotifications !== "boolean")
85
+ errors.push("capabilities.pushNotifications: must be boolean");
86
+ if (cap.extensions !== undefined) {
87
+ if (!Array.isArray(cap.extensions))
88
+ errors.push("capabilities.extensions: must be an array");
89
+ else
90
+ for (const [i, ext] of cap.extensions.entries()) {
91
+ if (!isObj(ext) || !isStr(ext.uri))
92
+ errors.push(`capabilities.extensions[${i}].uri: required string`);
93
+ }
94
+ }
95
+ }
96
+ if (!Array.isArray(card.skills)) {
97
+ errors.push("skills: required array (AgentSkill[])");
98
+ }
99
+ else {
100
+ card.skills.forEach((s, i) => checkSkill(s, `skills[${i}]`, errors));
101
+ }
102
+ if (card.securitySchemes !== undefined) {
103
+ if (!isObj(card.securitySchemes))
104
+ errors.push("securitySchemes: must be an object");
105
+ else
106
+ for (const [key, scheme] of Object.entries(card.securitySchemes)) {
107
+ if (!isObj(scheme) || scheme.type !== "http" || scheme.scheme !== "bearer") {
108
+ errors.push(`securitySchemes.${key}: only HTTPAuthSecurityScheme{type:"http",scheme:"bearer"} is vendored`);
109
+ }
110
+ }
111
+ }
112
+ return { ok: errors.length === 0, errors };
113
+ }
114
+ /** Spec 6.1 Task Object + 6.2 TaskStatus Object + 6.3 TaskState Enum. */
115
+ export function validateTask(task) {
116
+ const errors = [];
117
+ if (!isObj(task))
118
+ return { ok: false, errors: ["Task: not an object"] };
119
+ if (task.kind !== "task")
120
+ errors.push('kind: must be "task"');
121
+ if (!isStr(task.id))
122
+ errors.push("id: required string");
123
+ if (!isStr(task.contextId))
124
+ errors.push("contextId: required string");
125
+ if (!isObj(task.status)) {
126
+ errors.push("status: required object (TaskStatus)");
127
+ }
128
+ else {
129
+ const state = task.status.state;
130
+ if (!TASK_STATES.includes(state)) {
131
+ errors.push(`status.state: "${String(task.status.state)}" is not a TaskState`);
132
+ }
133
+ if (task.status.timestamp !== undefined && !isStr(task.status.timestamp)) {
134
+ errors.push("status.timestamp: must be a string");
135
+ }
136
+ }
137
+ if (task.artifacts !== undefined) {
138
+ if (!Array.isArray(task.artifacts))
139
+ errors.push("artifacts: must be an array");
140
+ else
141
+ for (const [i, a] of task.artifacts.entries()) {
142
+ if (!isObj(a) || !isStr(a.artifactId))
143
+ errors.push(`artifacts[${i}].artifactId: required string`);
144
+ else if (!Array.isArray(a.parts))
145
+ errors.push(`artifacts[${i}].parts: required array`);
146
+ else
147
+ a.parts.forEach((p, j) => checkPart(p, `artifacts[${i}].parts[${j}]`, errors));
148
+ }
149
+ }
150
+ if (task.history !== undefined) {
151
+ if (!Array.isArray(task.history))
152
+ errors.push("history: must be an array");
153
+ else
154
+ for (const [i, m] of task.history.entries()) {
155
+ if (!isObj(m) || m.kind !== "message")
156
+ errors.push(`history[${i}].kind: must be "message"`);
157
+ else {
158
+ if (m.role !== "user" && m.role !== "agent")
159
+ errors.push(`history[${i}].role: must be "user" or "agent"`);
160
+ if (!isStr(m.messageId))
161
+ errors.push(`history[${i}].messageId: required string`);
162
+ if (!Array.isArray(m.parts))
163
+ errors.push(`history[${i}].parts: required array`);
164
+ else
165
+ m.parts.forEach((p, j) => checkPart(p, `history[${i}].parts[${j}]`, errors));
166
+ }
167
+ }
168
+ }
169
+ return { ok: errors.length === 0, errors };
170
+ }
171
+ /** Spec 6.4 Message Object — used to validate an inbound message/send params.message. */
172
+ export function validateMessage(msg) {
173
+ const errors = [];
174
+ if (!isObj(msg))
175
+ return { ok: false, errors: ["Message: not an object"] };
176
+ if (msg.kind !== "message")
177
+ errors.push('kind: must be "message"');
178
+ if (msg.role !== "user" && msg.role !== "agent")
179
+ errors.push('role: must be "user" or "agent"');
180
+ if (!isStr(msg.messageId))
181
+ errors.push("messageId: required string");
182
+ if (!Array.isArray(msg.parts) || msg.parts.length === 0) {
183
+ errors.push("parts: required non-empty array");
184
+ }
185
+ else {
186
+ msg.parts.forEach((p, i) => checkPart(p, `parts[${i}]`, errors));
187
+ }
188
+ return { ok: errors.length === 0, errors };
189
+ }
190
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/a2a/schema/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAOzD,SAAS,KAAK,CAAC,CAAU;IACvB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AACD,SAAS,KAAK,CAAC,CAAU,IAAiB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;AACzE,SAAS,UAAU,CAAC,CAAU;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AACnE,CAAC;AAED;gEACgE;AAChE,SAAS,SAAS,CAAC,CAAU,EAAE,IAAY,EAAE,MAAgB;IAC3D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACjE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,kCAAkC,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,8CAA8C,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,oCAAoC;AACpC,SAAS,UAAU,CAAC,CAAU,EAAE,IAAY,EAAE,MAAgB;IAC5D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,+BAA+B,CAAC,CAAC;IAC/E,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;IAE7E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAChG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAC7F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAE/F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9B,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAC9H,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,iBAAiB,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QACtJ,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;;gBACxF,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,wBAAwB,CAAC,CAAC;gBACxG,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;;YAC/E,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC3E,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,wEAAwE,CAAC,CAAC;gBAC9G,CAAC;YACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAExE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAEtE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAkB,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;;YAC1E,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAC;qBAC7F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;;oBAClF,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YACtF,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;;YACtE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;oBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;qBACvF,CAAC;oBACJ,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;wBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;oBAC1G,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;wBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;oBACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;wBAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;;wBAC3E,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC;IAC1E,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACnE,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * a2a/server.ts — AIBroker as an A2A server.
3
+ *
4
+ * `handleA2A(req, res, ctx)` answers exactly two routes and refuses
5
+ * everything else identically to an unknown route (mirrors
6
+ * daemon/inbound.ts's rule: an unknown route and a wrong secret both 404,
7
+ * so probing cannot tell them apart):
8
+ *
9
+ * GET /.well-known/agent-card.json — public discovery, no auth. The
10
+ * card lists only sessions the operator explicitly exposed
11
+ * (a2a/exposure.ts) — never a full session roster.
12
+ * POST /a2a — JSON-RPC 2.0. `Authorization:
13
+ * Bearer <AIBROKER_A2A_TOKEN>`, constant-time compared. Missing,
14
+ * wrong, or absent-because-unconfigured all answer the SAME 404 as
15
+ * an unrecognized path — a prober cannot tell "wrong token" from
16
+ * "no such endpoint" from "no such path" by the response alone.
17
+ *
18
+ * Once authenticated, JSON-RPC errors follow the spec's own codes
19
+ * (schema/types.ts JSONRPC_ERRORS) rather than the uniform pre-auth
20
+ * refusal — an authenticated caller asking for an unknown method or a
21
+ * missing task is not the enumeration risk the pre-auth boundary guards
22
+ * against.
23
+ *
24
+ * `message/send` frames the arriving text exactly as daemon/inbound.ts
25
+ * frames anything from outside: DATA, not an instruction, with the task id
26
+ * a session replies against. `tasks/send` (pre-0.2 A2A naming) is accepted
27
+ * as an alias for `message/send`.
28
+ */
29
+ import type { IncomingMessage, ServerResponse } from "node:http";
30
+ import { type A2ATask } from "./tasks.js";
31
+ import { type AgentCard } from "./schema/types.js";
32
+ export declare const A2A_PATH = "/a2a";
33
+ export interface A2AContext {
34
+ agentName?: string;
35
+ version: string;
36
+ /** Full external URL of the JSON-RPC endpoint, e.g. "https://host/a2a". */
37
+ publicUrl: () => string;
38
+ /** AIBROKER_A2A_TOKEN. Undefined means "not configured" — every POST refused. */
39
+ token: string | undefined;
40
+ /** Deliver framed text to a session's mailbox, the same two-hop pattern inbound.ts uses. */
41
+ deliver: (session: string, text: string) => Promise<{
42
+ delivered: boolean;
43
+ detail?: string;
44
+ }>;
45
+ taskFile?: string;
46
+ exposureFile?: string;
47
+ }
48
+ /**
49
+ * Is A2A actually turned on, independent of whether the shared HTTP
50
+ * listener happens to be up for some other reason (Todoist)?
51
+ *
52
+ * Any one signal is enough, because each means "the operator did something
53
+ * deliberate": a bearer token was minted, a public URL was pointed at this
54
+ * host, or a session was actually exposed as a skill. Compiling this code in
55
+ * is not one of those signals — an idle build with nothing configured must
56
+ * read as off, the same way an idle Todoist webhook does.
57
+ */
58
+ export declare function a2aConfigured(exposureFile?: string): boolean;
59
+ export declare function buildAgentCard(ctx: A2AContext): AgentCard;
60
+ /**
61
+ * Apply a session's reply to one of its open A2A tasks. Owned here (not in
62
+ * core-handlers.ts, which this task must not edit) so the IPC wiring in
63
+ * docs/a2a-wiring can stay a thin call into this function.
64
+ */
65
+ export declare function applyA2AReply(taskId: string, text: string, file?: string): {
66
+ task: A2ATask;
67
+ ag2?: {
68
+ ok: boolean;
69
+ errors: string[];
70
+ };
71
+ } | undefined;
72
+ export declare function handleA2A(req: IncomingMessage, res: ServerResponse, ctx: A2AContext): Promise<void>;
73
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/a2a/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,OAAO,EAEY,KAAK,OAAO,EAC9B,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAkB,KAAK,SAAS,EAAyB,MAAM,mBAAmB,CAAC;AAI1F,eAAO,MAAM,QAAQ,SAAS,CAAC;AAE/B,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,iFAAiF;IACjF,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4FAA4F;IAC5F,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAI5D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,CAgCzD;AA+CD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAA0B,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,GAAG,SAAS,CAYxE;AAgGD,wBAAsB,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DzG"}